迭代器调试级别=1意味着什么? 在VS2010中,C++项目在X64/发行版:链接时,会得到此错误

迭代器调试级别=1意味着什么? 在VS2010中,C++项目在X64/发行版:链接时,会得到此错误,c++,visual-studio-2010,linker,C++,Visual Studio 2010,Linker,错误LNK2038:检测到“\u迭代器\u调试\u级别”不匹配:值“0”与值“1”不匹配 所有其他配置/平台组合链接正常。因此,静态库的_ITERATOR_DEBUG_LEVEL设置为0,依赖于它的.dll的_ITERATOR_DEBUG_LEVEL设置为1。我正试图弄清楚这意味着什么,这样我就可以弄清楚如何关闭它 我在谷歌搜索时发现的唯一错误是当_ITERATOR_DEBUG_LEVEL与0和2的值冲突时。表示试图将发布链接到调试。但我肯定这里不是这样 经过一个小时的努力,我一问这个问题就明白

错误LNK2038:检测到“\u迭代器\u调试\u级别”不匹配:值“0”与值“1”不匹配

所有其他配置/平台组合链接正常。因此,静态库的_ITERATOR_DEBUG_LEVEL设置为0,依赖于它的.dll的_ITERATOR_DEBUG_LEVEL设置为1。我正试图弄清楚这意味着什么,这样我就可以弄清楚如何关闭它


我在谷歌搜索时发现的唯一错误是当_ITERATOR_DEBUG_LEVEL与0和2的值冲突时。表示试图将发布链接到调试。但我肯定这里不是这样

经过一个小时的努力,我一问这个问题就明白了。。。为子孙后代:

_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)
不知何故,我在DLL的Release/x64配置中将_SECURE_SCL定义为预处理器定义,我不得不眯着眼睛很难注意到它。一旦我删除了这个定义,错误就消失了


编辑:我找到了这个。不幸的是,它确实需要一个相当新版本的Microsoft Silverlight来观看。

我在发布版本中遇到了这个问题,但我发现我的预处理器在定义调试时应该是NDEBUG。更改为NDEBUG修复了该问题。

对于那些预处理器定义完美但仍存在此错误的用户,请检查项目的运行时库设置


如果设置为其中一个调试版本,
\u迭代器\u调试\u级别
将设置为2。

将版本与调试库链接是获取此错误的唯一方法。再检查一遍。如果您确定,请再次检查,两次。今天我们看到了这篇文章,它准确地解释了_ITERATOR_DEBUG_LEVEL的用途,如果您好奇的话,它的值是什么: