【问题标题】:Running gtest using Visual Studio 2010: LNK4098 and LNK2005使用 Visual Studio 2010 运行 gtest:LNK4098 和 LNK2005
【发布时间】:2012-03-29 15:34:47
【问题描述】:

我已经按照here 的描述安装了 google 测试。但是当我尝试对我当前的项目使用测试时,我收到 2 个 LNK4098 警告:

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

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

【问题讨论】:

  • 您是否阅读了链接到如何使用相同的运行时库配置构建所有内容的答案?您收到的错误听起来像是某些部分是使用非调试运行时构建的,而其他部分是使用调试运行时构建的。

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


【解决方案1】:

您必须确保 googletest 和您的项目是使用相同版本的 C 运行时库 (CRT) 构建的。谷歌测试(目前为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 库的调试版本的完整路径(例如 C:\gtest-1.6.0\msvc\gtest\Debug\gtestd.lib)来编辑 Additional Dependencies 字段。

对发布配置再次执行相同操作,但将 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 库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 1970-01-01
    • 2012-07-08
    相关资源
    最近更新 更多