首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何判断一个库是用/mt还是/md编译的?

如何判断一个库是用/mt还是/md编译的?
EN

Stack Overflow用户
提问于 2013-10-21 14:19:14
回答 2查看 11.4K关注 0票数 27

给定一个编译过的lib,有没有一种方法可以仅仅通过观察它(可能是用dumpbin工具)来判断它是用/md还是/mt编译的?

编辑: dumpbin /directives foo.lib是针对lib不是使用/GL开关编译的情况的解决方案。有没有一个选项可以检查以这种方式优化的lib文件?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-10-21 14:32:00

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

代码语言:javascript
复制
dumpbin /directives foo.lib

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

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

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

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

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

代码语言:javascript
复制
dumpbin /DIRECTIVES foo.lib | find /i "msvcr"
票数 38
EN

Stack Overflow用户

发布于 2013-10-21 19:20:41

微软编译器的一个非常好的特性是,它保留了用于将源文件编译成.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“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\Include\um”-I"C:\Program Files (x86)\Windows \8.1\Include\shared“-I"C:\Program Files (x86)\Windows \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”可以让你很快找到答案。

票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19487465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档