【问题标题】:_iterator_debug_level value '0' doesn't match value '2'_iterator_debug_level 值“0”与值“2”不匹配
【发布时间】:2011-05-04 02:23:35
【问题描述】:

我刚刚将 Visual Studio (C++) 解决方案转移到另一台计算机上,在我所见的范围内设置了所有目录和设置,并对解决方案进行了清理/重建。我在编译的一堆 .obj 上得到了上面的错误,不知道该怎么办。

【问题讨论】:

  • 在解决方案中搜索 _iterator_debug_level 0 并对其进行评论

标签: c++ visual-studio debugging compiler-construction


【解决方案1】:

您似乎正在混合使用不同设置构建的目标文件。尝试进行完全干净的重建并检查所有项目文件设置以确保 _ITERATOR_DEBUG_LEVEL 宏相同(例如,您没有混合调试和发布构建的对象)。

【讨论】:

  • 由于某种原因,我的一个项目在发布模式下定义了 _SECURE_SCL=1,这导致了链接器错误。
  • 另一种可能性是一些项目/源文件定义_HAS_ITERATOR_DEBUGGING
【解决方案2】:

混合二进制文件(目标文件)是原因之一;另一个(我遇到的)是发布版本中_DEBUG 宏的错误定义。 _DEBUG 不是标准宏,但被 Microsoft 使用。

在 Emacs 中编辑 .vcxproj 文件后,我错误地输入了 _DEBUG 而不是 NDEBUG ,并遇到了完全相同的构建错误。

【讨论】:

    【解决方案3】:

    在某些情况下,混合

    中的选项

    属性>配置属性>C/C++>代码生成>运行时 图书馆

    包含的库当前工作项目之间 会导致这个问题。

    根据使用情况,在所有项目中将其统一设置为 /MD/MT/MDd/MTd

    【讨论】:

      【解决方案4】:

      我(奇怪地)发现是 _CRT_NON_CONFORMING_SWPRINTFS 导致的。当我删除它时,我没有收到“_iterator_debug_level value '0' doesn't match value '2'”而是以下警告:

      错误 6 错误 C4996: '_swprintf': swprintf 已更改为符合 ISO C 标准,添加了额外的字符计数参数。要使用传统的 Microsoft swprintf,请设置 _CRT_NON_CONFORMING_SWPRINTFS。

      【讨论】:

        【解决方案5】:

        我已经尝试解决这个问题五天了。点云库 (PCL) 代码在调试模式下成功构建,但在发布模式下失败。

        我已经多次重新配置我的库,但都没有帮助。我发现问题是发布版本继承了_DEBUG所以我在项目属性>>预处理器>>处理器定义下取消选中它并解决了。

        【讨论】:

        • 我的 pcl 也有同样的问题,你能解释一下如何解决这个问题吗?谢谢
        【解决方案6】:

        在我的 VS2019 项目的调试版本中尝试解决问题几天后。设置项目 >> 属性 >> C/C++ >> 处理器 _HAS_ITERATOR_DEBUGGING=0 定义对我有用。

        【讨论】:

          猜你喜欢
          • 2023-03-13
          • 2016-04-28
          • 1970-01-01
          • 2023-01-30
          • 2015-10-20
          • 2023-03-03
          • 2017-11-23
          • 2016-04-22
          • 2020-11-25
          相关资源
          最近更新 更多