我正在尝试链接一个依赖于几个静态库的 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 吗?