#visual-studio
#visual-студия
Вопрос:
У меня есть несколько готовых библиотек, и я работаю с проектами на C , используя различные версии VS (2015, 2017, 2019).
Есть ли способ, которым я могу проверить предварительно построенный.файл lib или .dll, чтобы определить, на какой платформе (142,141,140) он был создан?
Ответ №1:
Временная метка и версия компоновщика встроены в заголовок PE и необязательный заголовок соответственно и могут быть извлечены с dumpbin
помощью, например:
C:>dumpbin /nologo /headers %systemRoot%system32cmd.exe
Dump of file C:WINDOWSsystem32cmd.exe
PE signature found
File Type: EXECUTABLE IMAGE
FILE HEADER VALUES
8664 machine (x64)
7 number of sections
7E28B365 time date stamp <-------
0 file pointer to symbol table
0 number of symbols
F0 size of optional header
22 characteristics
Executable
Application can handle large (>2GB) addresses
OPTIONAL HEADER VALUES
20B magic # (PE32 )
14.20 linker version <-------
31000 size of code
...
Временная метка использовалась для хранения фактической даты и времени, на которых был построен модуль, но в Windows 10 это уже не так по причинам воспроизводимых сборок, как объясняется в книге Раймонда Чена » Почему временные метки модуля в Windows 10 настолько бессмысленны?»?: «установка временной метки в качестве хэша результирующего двоичного файла сохраняет воспроизводимость«.
Однако версия компоновщика по-прежнему надежно заполняется фактической major.minor
версией компоновщика, используемого для сборки модуля. Это идентифицирует используемый набор инструментов, например cmd.exe
, из Windows 10 версия 2004, похоже, была собрана с VS 2019 v16.0, т.Е. Набор инструментов v142.
Сама по себе версия компоновщика не гарантирует, что весь набор инструментов использовался как есть, поскольку технически возможно смешивать инструменты и библиотеки между разными версиями. Однако это встречается реже, поэтому версия компоновщика дает четкий намек на то, какие версии библиотек использовались.
Сопоставление между версиями компоновщика и версиями VS можно найти, например, здесь:
MSVC ver _MSC_VER
14.0 1900 (VS 2015 14.0)
14.1 1910 (VS 2017 15.0)
14.11 1911 (VS 2017 15.3)
...
14.16 1916 (VS 2017 15.9)
14.2 1920 (VS 2019 16.0)
14.21 1921 (VS 2019 16.1)
...
14.28 1928 (VS 2019 16.8)