LNK2038 RuntimeLibrary不匹配

程序编译的时候报错

  • 错误 LNK2038:检测到“RuntimeLibrary”的不匹配项:值“MD_DynamicRelease”不匹配值“MT_StaticRelease”
  • 错误 LNK2038:检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”(*.obj 中)

原因

  • 0不匹配2,Debug模式下使用了Release库文件
  • 2不匹配0,Release模式下使用了Debug库文件
  • 其他字符串一眼就能看出来问题

参数类型
多线程调试Dll (/MDd)MD_DynamicDebug
多线程Dll (/MD)MD_DynamicRelease
多线程(/MT)MD_StaticRelease
多线程(/MTd)MD_StaticDebug

解决

VS

如果是数字,在VS工程项目->属性->属性配置->C/C+±>预处理器->预处理定义->添加"_ITERATOR_DEBUG_LEVEL=2"(根据需要添加)

提示是MD_*之类的在工程上右键->属性->c/c++->代码生成->运行库 中修改为报错右侧的值,比如说 MD_StaticDebug

Qt

1
2
3
4
5
6
7
CONFIG(debug, debug|release) {
QMAKE_CXXFLAGS_DEBUG += /MTd
}

CONFIG(release, debug|release) {
QMAKE_CXXFLAGS_RELEASE += /MT
}

设置完必须清理->qmake->重新构建

命令行参数

在COMMON_COPTIONS选项后面继续添加/Zi /DEBUG /D"_DEBUG" /D"_ITERATOR_DEBUG_LEVEL=2"

  • /DEBUG只是是否要生成调试信息的开关。这个命令行选项在链接器页面那里
  • /Zi只是生成的调试信息的格式,这个格式是.pdb文件。当然还有好几种格式。这个命令行在编译页那里
  • /D"_DEBUG"使用DEBUG模式

LNK2038 RuntimeLibrary不匹配
https://feater.top/cpp/vs-lnk2038-runtime-library-not-match/
作者
JackeyLea
发布于
2023年6月1日
许可协议