2012-03-29 124 views
5

我已经安装谷歌测试,因为它的描述为here。但是当我尝试使用当前项目的测试时,我得到2个LNK4098警告:使用Visual Studio 2010运行gtest:LNK4098和LNK2005

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

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

+2

您是否阅读过您链接到如何使用相同的运行时库配置来构建所有内容的答案?你得到的错误听起来像某些部分是使用非调试运行时和其他使用调试运行时构建的。 – 2012-03-29 15:40:06

回答

6

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

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

要将项目设置为使用静态版本,请转至Project->Properties,并在窗口左上角选择配置:Debug。然后在此窗口中选择Configuration PropertiesC/C++Code GenerationRuntime Library的选项应为Multi-threaded Debug (/MTd)。然后选择Configuration PropertiesLinkerInput。通过提供gtest库Debug版的完整路径(例如C:\gtest-1.6.0\msvc\gtest\Debug\gtestd.lib)来编辑Additional Dependencies字段。

再次做同样的Release配置,但Runtime Library选项设置为Multi-threaded (/MT),并提供了完整路径GTEST库(例如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库。