_ITERATOR_DEBUG_LEVEL = 1是什么意思?

Skr*_*sli 22 c++ linker visual-studio-2010

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

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

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

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

Skr*_*sli 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)
Run Code Online (Sandbox Code Playgroud)

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

编辑:在msdn上找到了这个很好的讲座/教程(其中包括)解释_ITERATOR_DEBUG_LEVEL.不幸的是,它需要一个相当新版本的Microsoft Silverlight才能观看.