2

После переустановки Visual Studio 2010, я перекомпилировать код и столкнулся следующее сообщение об ошибке:Как проверить версию файла LIB?

Error 'LINK : fatal error LNK1123: failure during conversion to COFF: file invalid or corrupt'

Раствор упоминается, что Lib файл несовместим и мне нужно установить Visual Studio 2010 SP1. Я сделал это, и теперь он был решен.

Мне интересно, как я могу проверить, создан ли файл lib с помощью SP1 или нет? Я попробовал dumpbin, но я не могу найти версию в ее результатах.

+2

Принимая ответ без повышения («Этот ответ полезен»), это странно. – IInspectable

ответ

3

Это не было несовместимо с вашим LIB-файлом, что вызвало проблему здесь, поэтому проверка версии компоновщика, которая его создала, в любом случае не будет решением.

Проблема в том, что cvtres.exe (используемый внутренне связующим звеном) зависит от конкретной DLL (msvcr100_clr0400.dll), поставляемой с RTM VS 2010. При обновлении до более поздней версии .NET Framework (например, при установке .NET 4.5 или установке более поздней версии VS) эта DLL заменяется. Это останавливает работу cvtres.exe.

Причина, по которой установка VS 2010 SP1 исправляется, заключается в том, что она фактически модифицирует приложение cvtres.exe, чтобы разбить зависимость. И теперь, когда все части компоновщика компоновщика работают, вы можете скомпилировать и связать код без ошибок.

Конечно, есть другие проблемы, которые могут возникнуть при запуске микширования библиотек, созданных различными версиями компилятора и/или компоновщика. Они не гарантируют создание 100% совместимого выхода, поэтому их смешивание не поддерживается (по крайней мере, не между основными версиями, я не уверен, как это правило применяется к пакетам обновлений).

В целом, лучше всего всего перекомпилировать все библиотеки всякий раз, когда вы обновляете свою систему сборки. Единственный раз, когда вы этого не сделали, - это если у вас не было исходного кода, и в этом случае вам нужно быть очень заботиться об обновлении вашей системы сборки, чтобы вы не вводили безвозвратную несовместимость.

Что касается определения версии компоновщика, который подготовил конкретный двоичный файл, то с использованием dumpbin.exe (включенного в SDK) это точно правильный подход. Для статических библиотек, выполните следующую команду из визуальной строки студии SDK Command:

dumpbin /rawdata:1 MyLibrary.lib 

Вы увидите манифест сборки, который будет включать в себя полный путь к компилятору, используемым для создания библиотеки, а также версии от ЭЛТ, от которого это зависит.

Для динамических библиотек (т.е., DLL) и исполняемых файлов, выполните следующую команду:

dumpbin /headers MyApp.exe 

Смотри в разделе «Дополнительный заголовок значения» (на самом деле не опция) для версии линкера, наряду с меткой времени, когда она была сгенерирована.

Обратите внимание, что вы вряд ли найдете эту информацию в релиз сборки библиотеки или двоичного кода.

Смежные вопросы