Если статическая библиотека была написана на C ++ и была построена с использованием MSVC 2010 или более новой версии, то директива FAILIFMISMATCH могла быть помещена компилятором в объектные файлы.
Я не могу найти официальный документ Microsoft о директиве FAILIFMISMATCH, но, похоже, он используется компоновщиком для обнаружения несовместимости между версиями стандартной библиотеки C ++.
Вы можете использовать следующую команду для распечатки этих директив из статической библиотеки:
find "FAILIFMISMATCH" xyz.lib
(или используйте способ, упомянутый Мейманом, если вы предпочитаете Cygwin или msys)
Результат может быть похож на это:
0@ /FAILIFMISMATCH:"_MSC_VER=1900" /FAILIFMISMATCH:"_ITERATOR_DEBUG_LEVEL=0" /FAILIFMISMATCH:"RuntimeLibrary=MD_DynamicRelease" /DEFAULTLIB:"msvcprt" /FAILIFMISMATCH:"_CRT_STDIO_ISO_WIDE_SPECIFIERS=0" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"uuid.lib" /DEFAULTLIB:"MSVCRT" /DEFAULTLIB:"OLDNAMES"
Обратите внимание на первую директиву: "_MSC_VER = NNNN". По моим наблюдениям, NNNN всегда соответствует версии компилятора, использованной для создания объектного файла. В моем случае xyz.lib был создан с обновлением 3 MSVC 2015, его версия компилятора C ++ - 19.00.24215, поэтому он поместил / FAILIFMISMATCH: "_ MSC_VER = 1900" в объектный файл.
Подробное отображение между версией Visual Studio и версией компилятора Microsoft C / C ++ можно найти здесь .