鉴于已编译lib
,有没有办法通过查看它(可能使用/md
工具)来判断它是使用/mt
还是dumpbin
编译的?
修改
对于dumpbin /directives foo.lib
未使用lib
开关编译的情况,/GL
是一种解决方案。是否可以选择检查以这种方式优化的lib
文件?
答案 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"让你快速找到答案。