[C++][MSVC][Error] 检测到 RuntimeLibrary 的不匹配项: 值 MT_StaticRelease 不匹配值 MD_DynamicRelease

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 参考资料

posted @   Zheng-Bicheng  阅读(339)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· 写一个简单的SQL生成工具
点击右上角即可分享
微信分享提示