c++ - GoogleTest 编译时出现 MT_StaticRelease 错误
问题描述
如何使用 /MT 选项强制 google 测试编译?我看到谷歌测试试图用 MT 编译(internal_utils.cmake line 33):
if (NOT BUILD_SHARED_LIBS AND NOT gtest_force_shared_crt)
string(REPLACE "/MD" "-MT" ${flag_var} "${${flag_var}}")
endif()
但它不起作用(BUILD_SHARED_LIBS 和 gtest_force_shared_crt 被禁用)。
当我的项目使用 MT 编译时出现错误:
gtest.lib(gtest-all.obj):错误 LNK2038:检测到“RuntimeLibrary”不匹配:值“MD_DynamicRelease”与值“MT_StaticRelease”不匹配
还有更多的一些 LNK2005 和 LNK4217。如果我尝试在没有 MT 的情况下编译我的项目,一切都可以编译。我该如何解决?提前致谢!
解决方案
这if
是一个测试,实现了一个开关,允许您在包含 googletest之前对其进行配置。
手册中也提到了:
Visual Studio 动态与静态运行时
默认情况下,新的 Visual Studio 项目动态链接 C 运行时,但 GoogleTest 静态链接它们。这将生成一个类似于以下内容的错误:gtest.lib(gtest-all.obj) : error LNK2038: mismatch detected for 'RuntimeLibrary': value 'MTd_StaticDebug' doesn't match value 'MDd_DynamicDebug' in main.obj
GoogleTest 已经为此提供了 CMake 选项:
gtest_force_shared_crt
启用此选项将使 gtest 也动态链接运行时,并匹配包含它的项目。
因此,只需将其设置在您的项目中,例如:
set(gtest_force_shared_crt on)
include(FetchContent)
FetchContent_Declare(googletest
GIT_REPOSITORY https://github.com/google/googletest.git
GIT_TAG main)
FetchContent_MakeAvailable(googletest)
enable_testing()
推荐阅读
- c++ - 使用透明 std 函数对象时,我们还需要写空尖括号吗?
- javascript - 增加突出显示区域的大小的问题
- javascript - 使用 JavaScript 将十六进制转换为 Windows-1251
- android - 带有构造器的房间类型转换器
- c# - 为什么使用pdfbox在输出文件中显示正方形而不是符号
- c# - 努力支持的单元测试冲突
- c# - 如何从 Azure Blob 存储中获取今天修改的文件
- python - TypeError:只能将 str(不是“int”)连接到 str -(新学习者)
- groovy - 当示例不应该有 null 时,Birt createFactoryObject 返回 null
- php - 如何在mysql中连接两个表记录