Mat*_*ton 7 linker-errors googletest visual-studio-2010 lnk2005
我有一个庞大而复杂的项目,最终得到了单元测试.我已经在Visual Studio 2010本地构建了googleTest 1.6.0,使用cmake构建的项目文件就像README指定的那样.
该项目有许多静态和动态链接的依赖库.其中许多是专有的.所有链接尝试都会产生220个这样的错误.这是一个抽样:
msvcprtd.lib(MSVCP100D.dll):错误LNK2005:"public:void __cdecl std :: _ Container_base12 :: _ Orphan_all(void)"(?_ Olphan_all @ _Container_base12 @std @@ QEAAXXZ)已在gtest.lib中定义(gtest-all. OBJ)
libcpmtd.lib(cerr.obj):错误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:已在MSVCRTD.lib中定义_configthreadlocale(MSVCR100D.dll)
链接:警告LNK4098:defaultlib'MSVCRTD'与使用其他库冲突; use/NODEFAULTLIB:library LINK:警告LNK4098:defaultlib'LIBCMTD'与使用其他库冲突; 使用/ NODEFAULTLIB:库
致命错误LNK1169:找到一个或多个多重定义的符号
我已经尝试了/ NODEFAULTLIB标志,并且我试图忽略msvcprtd.lib,MSVCRTD.lib和LIBCMTD.lib,如建议的那样,但后来我遇到了未解决的符号......
项目和googleTest都使用x64,/ MP,/ MDd和no/clr进行编译.
我一直在玩编译器标志,想知道是否存在某种版本不匹配.在我理解的范围内,Dumpbin没有暗示我可能理解的任何东西.我希望有一个呃
Vla*_*sev 12
看起来您的问题已在Google Talk的常见问题解答中得到解答.确保所有库都使用/ MD(d)设置.
如果在项目中使用相同的编译器设置构建项目时尝试将测试项目与Google Test库链接,则可能会收到以下链接器错误或警告.
- LNK2005:已在对象中定义的符号
- LNK4217:在函数'function'中导入的本地定义的符号'symbol'
- LNK4049:已导入本地定义的符号"符号"Google Test项目(gtest.vcproj)将运行时库选项设置为/ MT(使用多线程静态库,/ MTd用于调试).如果您的项目使用其他内容,例如/ MD(使用多线程DLL,/ MDd进行调试),则需要更改Google Test项目中的设置以匹配您的项目.
要更新此设置,请在Visual Studio IDE中打开项目属性,然后选择分支Configuration Properties | C/C++ | 代码生成并更改选项"运行时库".您也可以尝试使用gtest-md.vcproj而不是gtest.vcproj.
| 归档时间: |
|
| 查看次数: |
6455 次 |
| 最近记录: |