问题描述: 在编译某些项目时,编译运行报错如下
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++—>预处理器中有定义,
解决方案: 删除或者修改为相应的值。