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

时间:2013-10-21 06:19:14

标签: c++ visual-c++

鉴于已编译lib,有没有办法通过查看它(可能使用/md工具)来判断它是使用/mt还是dumpbin编译的?

修改 对于dumpbin /directives foo.lib未使用lib开关编译的情况,/GL是一种解决方案。是否可以选择检查以这种方式优化的lib文件?

2 个答案:

答案 0 :(得分:29)

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

dumpbin /directives foo.lib

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

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

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

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

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

dumpbin /DIRECTIVES foo.lib | find /i "msvcr"

希望这能让你走上正轨。

答案 1 :(得分: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 \项目\ Win32Project1 \调试\ 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"让你快速找到答案。