27

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

编辑: 是针对未使用switch编译dumpbin /directives foo.lib的情况的解决方案。是否可以检查以这种方式优化的文件?lib/GLlib

4

2 回答 2

39

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

dumpbin /directives foo.lib

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

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

或者

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

或者

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

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

dumpbin /DIRECTIVES foo.lib | find /i "msvcr"
于 2013-10-21T06:31:59.713 回答
14

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\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”可以让您快速找到。

于 2013-10-21T11:20:41.473 回答