1 简介
本文将介绍在 C++ 编程中使用 MSVC 编译器时可能遇到的错误:检测到 RuntimeLibrary 的不匹配项:值 MT_StaticRelease 不匹配值 MD_DynamicRelease。该错误通常是由于编译器和链接器之间的设置不一致引起的。
2 VisualStudio环境
在 MSVC 工程上右键->属性,找到配置属性 -> C/C++ -> 代码生成 -> 运行库,如下图
这四个参数的区别如下:
- 最后一个字母带d和不带d的区别:后面带d表示Debug,生成对象(exe、lib都行)是带有调试信息的,生成对象占用空间相比不带d的会更大一些
- MT和MD的区别:前者是静态链接,将有关依赖库都打包进生成对象了,所以占用空间更大;后者是动态链接,运行时依赖电脑环境,容易出现换个电脑报错dll的现象。
2 CMake环境
参考 CMake设置MSVC工程MT/MTd/MD/MDd_cmake mtd-CSDN博客 的方案来解决这个问题
# 设置策略CMP0091为NEW,新策略
if (POLICY CMP0091)cmake_policy(SET CMP0091 NEW)
endif (POLICY CMP0091)# 声明一个工程
project(TestpyTest)# 添加一个exe
add_executable(test test.cpp)# 设置MT/MTd
set_property(TARGET test PROPERTY MSVC_RUNTIME_LIBRARY "MultiThreaded$<$<CONFIG:Debug>:Debug>")
需要注意的有以下几点:
- cmake_policy 这个步骤一定要放在 声明project 之前。
- MSVC_RUNTIME_LIBRARY的取值可以替换为以下几个:
- MultiThreaded :对应MT
- MultiThreadedDLL :对应MD
- MultiThreadedDebug:对应MTd
- MultiThreadedDebugDLL:对应MDd
3 参考资料
- CMake设置MSVC工程MT/MTd/MD/MDd_cmake mtd-CSDN博客