error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”

问题描述: 在编译某些项目时,编译运行报错如下

1>sample_common.lib(thread_windows.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(thread.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(sample_utils.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(mfx_buffering.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(plugin_utils.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(general_allocator.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(avc_spl.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(base_allocator.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)
1>sample_common.lib(d3d_allocator.obj) : error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2(audio_decoder.obj 中)

问题分析: _ITERATOR_DEBUG_LEVEL是记录编译模式的系统变量:

  • 0表示当前工程是 Debug 版本;
  • 2表示当前工程是 Release 版本。

可能原因一:

  • error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“0”不匹配值“2”:产生这个问题的原因是当前工程是Debug版本,而引用的库文件时Release版本。

  • error LNK2038: 检测到“_ITERATOR_DEBUG_LEVEL”的不匹配项: 值“2”不匹配值“0”:这个问题则说明是Release模式引用了Debug的库文件。这类问题在引用文件时要注意版本的匹配。

解决方法: 解决方案—>属性—>链接器—>输入—>附加依赖项中修改lib文件名称。Debug模式下只是用Debug模式dll文件的文件名,Release模式下只是用 Release 模式的dll。(Debug模式dll文件的文件名末尾通常会带d)

可能原因二: 项目属性设置错误,解决方案–》属性–》C/C+±-》代码生成–》运行库 属性。

  • 该属性在debug模式下应设置"多线程调试 DLL (/MDd)",release模式下应该设置为“多线程 DLL (/MD)”。如果设置反了也会出现上述问题。

解决方案: 根据模式修改运行库属性就行。

可能原因三: 如果上面两种原因都不是,就可能是代码中给_ITERATOR_DEBUG_LEVEL变量人为赋值了。

例如 BasicExcel.cpp文件中有如下语句:

#ifdef _DEBUG
#define _ITERATOR_DEBUG_LEVEL 0	// speedup iterator operations while debugging
#endif

代码中在Debug模式下将_ITERATOR_DEBUG_LEVEL设置为0,希望能在 Debug模式下加速程序运行,这样在 Debug模式下_ITERATOR_DEBUG_LEVEL值不匹配,也可能出现上述问题。
解决方案: 程序中修改_ITERATOR_DEBUG_LEVEL为对应的值就可以解决问题。

可能原因四: 解决方案—>属性—>配置属性—>C/C++—>预处理器中有定义,
图一
解决方案: 删除或者修改为相应的值。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SunkingYang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值