如何判断lib是用/ mt还是/ md编译的?

zen*_*poy 21 c++ visual-c++

鉴于编译lib,有没有办法告诉它是编译/md/mt只是通过查看它(可能与dumpbin工具)?

编辑: dumpbin /directives foo.lib对于lib未使用/GLswitch 编译的情况的解决方案.是否有选项可以检查lib以这种方式优化的文件?

Chr*_*sen 30

是的,您可以使用dumpbin的/DIRECTIVES选项来查找.lib中的对象要链接的运行时库:

dumpbin /directives foo.lib
Run Code Online (Sandbox Code Playgroud)

查找此处指定的运行时库的实例.例如,您可能会看到:

/DEFAULTLIB:MSVCRTD (用/ MDd编译的模块)

要么

/DEFAULTLIB:MSVCRT (用/ MD编译的模块)

要么

/DEFAULTLIB:LIBCMT (用/ MT编译的模块)

可能会有很多/DEFAULTLIB指令,因此您可以使用以下术语进行搜索:

dumpbin /DIRECTIVES foo.lib | find /i "msvcr"
Run Code Online (Sandbox Code Playgroud)

希望这能让你走上正轨.


Han*_*ant 15

Microsoft编译器的一个非常好的功能是它保留了用于将源文件编译为.obj文件的命令行.这可以让你通过查看.lib文件找回它,等待它,Notepad.exe.只需搜索"cl.exe".

例如,这是我在使用VS2013构建的名为Win32Project1.lib的示例库上打开记事本时看到的内容:

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:precise -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 \包括 "-I "C:\ Program Files文件(x86)的\的Windows套件\ 8.1 \包含\嗯" -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"可以让您快速找到答案.

  • 这似乎不再是真实的,无论是.lib,.obj还是.exe(即在VS2013中尝试protobuf 2.6.1) (17认同)
  • @FernandoGonzalezSanchez,VS2017 也是如此 (2认同)