【发布时间】:2011-09-19 20:28:10
【问题描述】:
我有一个大型而复杂的项目,最终要进行单元测试。我已经在本地使用 Visual Studio 2010 构建了 googleTest 1.6.0,项目文件按照 README 的规定使用 cmake 构建。
这个项目有许多静态和动态链接的依赖库。其中许多是专有的。所有链接尝试都会产生 220 个此类错误。这是一个示例:
msvcprtd.lib(MSVCP100D.dll) : error LNK2005: "public: void __cdecl std::_Container_base12::_Orphan_all(void)" (?_Orphan_all@_Container_base12@std@@QEAAXXZ) 已经在 gtest.lib(gtest -all.obj)
libcpmtd.lib(cerr.obj) : error LNK2005: "protected: char * __cdecl std::basic_streambuf >::_Gndec(void)" (?_Gndec@?$basic_streambuf@DU?$char_traits@D@std@ @@std@@IEAAPEADXZ) 已在 msvcprtd.lib(MSVCP100D.dll) 中定义
LIBCMTD.lib(setlocal.obj) : 错误 LNK2005: _configthreadlocale 已在 MSVCRTD.lib(MSVCR100D.dll) 中定义
LINK:警告 LNK4098:defaultlib 'MSVCRTD' 与其他库的使用冲突;使用 /NODEFAULTLIB:library 链接:警告 LNK4098:defaultlib 'LIBCMTD' 与使用其他库冲突;使用 /NODEFAULTLIB:library
致命错误 LNK1169:找到一个或多个多重定义符号
我已经尝试了 /NODEFAULTLIB 标志,并且我尝试按照建议只忽略 msvcprtd.lib、MSVCRTD.lib 和 LIBCMTD.lib,但是我遇到了无法解析的符号...
项目和 googleTest 都使用 x64、/MP、/MDd 编译,没有 /clr。
我一直在玩编译器标志,想知道是否存在某种版本不匹配。 Dumpbin,就我的理解而言,并没有暗示我可能理解的任何事情。我希望有一个呃
【问题讨论】:
标签: visual-studio-2010 linker-errors googletest lnk2005