gpt4 book ai didi

windows - 如何找出哪个库包含 libcmt?

转载 作者:可可西里 更新时间:2023-11-01 10:06:12 26 4
gpt4 key购买 nike

我正在尝试链接一个依赖于多个静态库的 Windows 可执行文件(其中一些我已经构建,一些我还没有)。当我做链接时,我收到了一堆错误,例如:

LIBCMT.lib(mlock.obj) : error LNK2005: _unlock already defined in MSVCRT.lib(MSVCR100.dll)

这是经典的/MD 与/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),是否有一种工具可以让我查看我正在链接的各种库,并在我使用时查看哪个库引入了 libcmt想改用 msvcrt 吗?

最佳答案

我遇到了同样的问题,我在库中使用了 dumpbin ( http://msdn.microsoft.com/en-us/library/z66yd3h6.aspx ) 和/DIRECTIVES 选项。它将显示许多/DEFAULTLIB 部分,每个部分都是您的库尝试使用的另一个库。 Dumpbin 需要从 Visual Studio 命令提示符运行。

dumpbin /DIRECTIVES liblua52.lib

我有 100 多个包含所有解决方案配置和平台的库,所以我制作了一个 python 2.7 脚本 (crtdisplay.py) 来帮我完成它。它可以在我的 bitbucket 存储库中找到 https://bitbucket.org/vimarina/ctrlcv/src/57b7ddca15b5c7fefddcf20ffcea0633223a4bd6/crtdisplay .把它放在你的库的根目录中。该代码中没有太多错误检查,所以如果它失败了,请不要感到惊讶 :)。我使用的是 Visual Studio 2010,因此在其他版本的 Visual Studio 上可能会失败。

 crtdisplay.py > info.txt

关于windows - 如何找出哪个库包含 libcmt?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22354089/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com