Windows 如何找出包含libcmt的库?

Windows 如何找出包含libcmt的库?,windows,linker,msvcrt,visual-studio-2010,libcmtd,Windows,Linker,Msvcrt,Visual Studio 2010,Libcmtd,我正在尝试链接一个依赖于多个静态库的Windows可执行文件(其中一些我已经构建,一些我还没有)。当我进行链接时,会出现如下错误: LIBCMT.lib(mlock.obj) : error LNK2005: _unlock already defined in MSVCRT.lib(MSVCR100.dll) 这是典型的/MD vs/MT问题(C运行时是静态链接还是动态链接)。我首先尝试了简单的解决方案,添加链接器标志 /nodefaultlib:libcmt /nodefaultlib:l

我正在尝试链接一个依赖于多个静态库的Windows可执行文件(其中一些我已经构建,一些我还没有)。当我进行链接时,会出现如下错误:

LIBCMT.lib(mlock.obj) : error LNK2005: _unlock already defined in MSVCRT.lib(MSVCR100.dll)
这是典型的/MD vs/MT问题(C运行时是静态链接还是动态链接)。我首先尝试了简单的解决方案,添加链接器标志

/nodefaultlib:libcmt /nodefaultlib:libcpmt
但这只会产生不同的错误:

msvcprt.lib(MSVCP100.dll) : error LNK2005: "public: __cdecl std::_Locinfo::~_Locinfo(void)" (??1_Locinfo@std@@QEAA@XZ) already defined in gtest.lib(gtest-all.cc.obj)
gtest.lib(gtest-all.cc.obj) : error LNK2001: unresolved external symbol "private: static int std::locale::id::_Id_cnt" (?_Id_cnt@id@locale@std@@0HA)
我已经浏览了我正在构建的库,据我所知,我正在构建它们全部/MD。我说“据我所知”,因为其中一些是第三方库,带有自己的makefile,所以我无法完全控制构建过程


我不认为“依赖”对库(只有EXE和DLL)有效,是否有一个工具可以让我查看我正在链接的各种库,并在我想使用msvcrt时查看哪个库引入了libcmt?

我也遇到了同样的问题,我在libs上使用了dumpbin()和/directivers选项。它将显示许多/DEFAULTLIB部分,每个部分都是您的lib尝试使用的另一个lib。Dumpbin需要从visualstudio命令promt运行

dumpbin /DIRECTIVES liblua52.lib
我的所有解决方案配置和平台都有100多个libs,所以我制作了一个Python2.7脚本(crtdisplay.py)来为我做这件事。可以在我的bitbucket存储库中找到它。将它放在libs的根目录中。检查该代码时没有太多错误,因此如果失败,请不要感到惊讶:)。我使用了VisualStudio2010,因此在其他版本的VisualStudio上可能会失败

 crtdisplay.py > info.txt

你不能用boost控制这个前提是错误的。它甚至为.lib文件使用了不同的名称,您所能做的就是选择错误的名称。不是为了gtest,典型的谷歌问题,你真的需要重建它/MD是通用的“始终有效”设置,请始终如一地使用它。对不起,提到boost是个坏主意。涉及到几个第三方库,boost只是其中之一。我正在选择我认为正确的boost库,但是(1)我可能做得不对,(2)还有其他第三方库没有那么直截了当。我在使用dumpbin时遇到了麻烦,因为/directions没有显示任何有趣的内容。事实证明,一些LIB根本就没有。这些不是问题!扫描所有的lib,直到我找到一些列出了指令的lib,最终发现了冲突的lib。