Как узнать, скомпилирована ли lib с помощью /mt или/md?
Учитывая скомпилированный lib
, есть ли способ определить, скомпилирован ли он с помощью /md
или /mt
, просто посмотрев на него (возможно, с помощью инструмента dumpbin
)?
Edit:
dumpbin /directives foo.lib
является решением для случая, когда lib
не был скомпилирован с помощью переключателя /GL
. Есть ли возможность проверить файл lib
, который был оптимизирован таким образом?
Ответы
Ответ 1
Да, вы можете использовать параметр dumpbin /DIRECTIVES
, чтобы найти, какие библиотеки времени выполнения объекты в .lib хотите связать с:
dumpbin /directives foo.lib
Посмотрите на экземпляры библиотек времени выполнения, указанные здесь. Например, вы можете увидеть:
/DEFAULTLIB:MSVCRTD
(модуль скомпилирован с /MDd )
или
/DEFAULTLIB:MSVCRT
(модуль скомпилирован с /MD )
или
/DEFAULTLIB:LIBCMT
(модуль скомпилирован с /MT )
Вероятно, будет много директив /DEFAULTLIB
, поэтому вы можете искать с помощью таких терминов, как:
dumpbin /DIRECTIVES foo.lib | find /i "msvcr"
Надеюсь, это поможет вам на правильном пути.
Ответ 2
Очень приятная особенность компилятора Microsoft заключается в том, что он сохраняет командную строку, которая использовалась для компиляции исходного файла в файл .obj. Это позволяет вам найти его, посмотрев файл .lib, дождавшись его, Notepad.exe. Просто найдите "cl.exe".
Например, это то, что я вижу, когда я использую Notepad, открытый в библиотеке образцов с именем Win32Project1.lib, который я создал с помощью VS2013:
C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\bin\CL.exe cmd -c -ZI -nologo -W3 -WX- -sdl -Od -Oy- -DWIN32 -D_DEBUG -D_LIB - DHELLO_STACKOVERFLOW -D_UNICODE -DUNICODE -Gm -EHs -EHc -RTC1 -MDd -GS -fp: exact -Zc: wchar_t -Zc: forScope -Ycstdafx.h -Fp "c:\Users\hpass_000\documents\visual studio 2013\Projects\Win32Project1\Debug\Win32Project1.pch" -Fo "c:\Users\hpass_000\documents\visual studio 2013\Projects\Win32Project1\Debug\" -Fd "c:\Users\hpass_000\documents\visual studio 2013\Projects\Win32Project1\Debug\vc120.pdb" -Gd -TP -analyze- -errorreport: prompt -I "C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\include" -I "C:\Program Files (x86 )\Microsoft Visual Studio 12.0\VC\atlmfc\include" -I "C:\Program Files (x86)\Windows Kits\8.1\Include\um" -I "C:\Program Files (x86)\Windows Kits\8.1\Include\shared" -I "C:\Program Files (x86)\Windows Kits\8.1\Include\winrt" -X src stdafx.cpp pdb c:\Users\hpass_000\documents\visual studio 2013\Projects\Win32Project1\Debug\vc120.pdb
Как вы можете сказать, я скомпилировал с /MDd
Остерегайтесь того, что .lib может содержать несколько файлов .obj с различными настройками. Поиск "-mt" и "-md" позволяет быстро узнать.