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

Running gtest using Visual Studio 2010: LNK4098 and LNK2005

本文关键字:LNK4098 LNK2005 gtest 运行 Visual Studio 2010 使用      更新时间:2023-10-16

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

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

"LIBCMTD"也是如此,还有一堆LNK2005错误。但是当我实际上忽略这两个默认库时,它无济于事:我得到更多的错误。怎么了?

您必须确保googletest和您的项目是使用相同版本的C运行时库(CRT(构建的。 谷歌测试(目前为 v1.6.0(提供了 2 个 Visual Studio 解决方案文件; gtest-1.6.0msvcgtest.sln使用静态版本,gtest-1.6.0msvcgtest-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 库调试版本的完整路径来编辑 Additional Dependencies 字段(例如 C:gtest-1.6.0msvcgtestDebuggtestd.lib(。

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

如果您决定要使用 CRT 的 dll 版本,请选择 Multi-threaded Debug DLL (/MDd)Multi-threaded DLL (/MD) ,并链接到 gtest-md 库,这些库将位于 gtest-1.6.0msvcgtest-md... 中,而不是 gtest-1.6.0msvcgtest... 中。