Подтвердить что ты не робот

Как узнать, скомпилирована ли lib с помощью /mt или/md?

Учитывая скомпилированный lib, есть ли способ определить, скомпилирован ли он с помощью /md или /mt, просто посмотрев на него (возможно, с помощью инструмента dumpbin)?

Edit: dumpbin /directives foo.lib является решением для случая, когда lib не был скомпилирован с помощью переключателя /GL. Есть ли возможность проверить файл lib, который был оптимизирован таким образом?

4b9b3361

Ответ 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" позволяет быстро узнать.