_ITERATOR_DEBUG_LEVEL = 1是什么意思?

时间:2010-11-09 02:45:12

标签: c++ visual-studio-2010 linker

在VS2010中,C ++项目在x64 / Release中链接时出现此错误:

错误LNK2038:检测到'_ITERATOR_DEBUG_LEVEL'不匹配:值'0'与值'1'不匹配

所有其他配置/平台组合链接都很好。所以静态库是在_ITERATOR_DEBUG_LEVEL设置为0的情况下构建的。依赖于它的.dll以某种方式将_ITERATOR_DEBUG_LEVEL设置为1.我试图找出这意味着什么,所以我可以弄清楚如何关闭它!

我在谷歌搜索时发现的唯一对此错误的引用是当_ITERATOR_DEBUG_LEVEL与值0和2冲突时。这表示尝试将释放与调试联系起来。但我确信这不是这种情况。

3 个答案:

答案 0 :(得分:37)

嗯,经过一个小时的挣扎,我在问了这个问题之后就明白了......后代:

_ITERATOR_DEBUG_LEVEL = 0 (in release mode)
_ITERATOR_DEBUG_LEVEL = 1 (in release mode if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 (in debug mode)

不知怎的,我只将_SECURE_SCL定义为我的DLL的Release / x64配置中的预处理器定义,我不得不眯着眼睛注意它。一旦我删除了该定义,错误就消失了。

修改:我发现了nice lecture/tutorial on msdn that (among other things) explains _ITERATOR_DEBUG_LEVEL。不幸的是,它需要一个相当新版本的Microsoft Silverlight才能观看。

答案 1 :(得分:3)

对于那些具有完美预处理器定义但仍然遇到此错误的人,请检查项目的运行时库设置。

如果设置为其中一个调试版本,_ITERATOR_DEBUG_LEVEL将设置为2。

答案 2 :(得分:2)

我在发布版本上遇到了这个问题,但我发现我的预处理器在应该是NDEBUG时定义了_DEBUG。更改为NDEBUG解决了问题。