使用Visual Studio 2010运行gtest:LNK4098和LNK2005

时间:2012-03-29 15:34:47

标签: c++ visual-studio-2010 googletest

我已经安装了谷歌测试,因为它被描述为here。但是当我尝试对当前项目使用测试时,我收到2个LNK4098警告:

defaultlib'MSVCRTD'与使用其他lib冲突;使用/ NODEFAULTLIB:库

和'LIBCMTD'相同,以及一堆LNK2005错误。但是,当我实际上忽略这两个默认库时,它没有帮助:我得到更多的错误。有什么问题?

1 个答案:

答案 0 :(得分:7)

您必须确保googletest,并且您的项目是使用相同版本的C运行时库(CRT)构建的。 Google测试(目前为v1.6.0)提供了2个Visual Studio解决方案文件; gtest-1.6.0\msvc\gtest.sln使用静态版本,gtest-1.6.0\msvc\gtest-md.sln使用动态(dll)版本。默认情况下,通过Visual Studio创建的项目使用dll版本。

您需要决定是否希望项目使用CRT的静态版本或动态版本。

要将项目设置为使用静态版本,请转到Project->Properties,然后在窗口左上角选择配置:Debug。然后在同一窗口中选择Configuration Properties - > C/C++ - > Code GenerationRuntime Library的选项应为Multi-threaded Debug (/MTd)

然后,您需要确保链接到相应版本的gtest,因此请选择Configuration Properties - > Linker - > Input。通过提供gtest库的Debug版本的完整路径(例如Additional Dependencies)来编辑C:\gtest-1.6.0\msvc\gtest\Debug\gtestd.lib字段。

对于Release Configuration再次执行相同操作,但将Runtime Library选项设置为Multi-threaded (/MT)并提供gtest库的Release版本的完整路径(例如C:\gtest-1.6.0\msvc\gtest\Release\gtest.lib)。

如果您决定使用CRT的dll版本,请选择Multi-threaded Debug DLL (/MDd)Multi-threaded DLL (/MD),然后链接到位于gtest-1.6.0\msvc\gtest-md\...而不是gtest-1.6.0\msvc\gtest\...的gtest-md库{1}}。