使用 Visual Studio 2010 运行 gtest:LNK4098 和 LNK2005
Running gtest using Visual Studio 2010: LNK4098 and LNK2005
我已经安装了谷歌测试,因为它在这里描述。但是当我尝试为当前项目使用测试时,我收到 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 Generation
。 Runtime 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...
中。
- 运行 C++ 单元测试时LNK2005链接错误
- 无法使函数公开。获取:"LNK2005"错误。如何调试链接器错误
- 如果两个静态库使用相同的另一个静态库,如何避免"LNK2005 Already Defined error"?
- 错误LNK2005无法解决问题的解决方案
- 在UE4(虚幻引擎4)中集成LuaJit时LNK2005错误
- 从模板继承的 MSVC DLL 导出类会导致LNK2005已定义的错误
- C++错误LNK2005和不同项目文件的常规继承
- LNK2005 中已经定义的函数
- LNK2005 AND LNK1169 Errors - C++
- 我需要帮助C LNK2005和LNK1169中的类代码分开
- 使用 AMD 的 Vulkan 内存分配器时出现链接器错误 (LNK2005)
- 我在用c ++编程时一直遇到LNK2005错误,我似乎无法弄清楚问题是什么
- Error LNK2005 and LNK1169
- LNK2005 of death (c++)
- 是什么导致了代码中出现"error LNK2005: already defined in .obj"错误?
- 错误的LNK2005已定义为将C /Fortran解决方案更新为VS 2013
- 在VS 2015中使用Microchip的mpusbapi.h会产生"LNK2005 Already defined"错误
- C++中的即时对象初始化失败,出现LNK2005错误
- 解决LNK4098:默认库'MSVCRT'冲突 (DCMTK) 和 LNK2038/LNK2005
- 使用 Visual Studio 2010 运行 gtest:LNK4098 和 LNK2005