_iterator_debug_level 值“0”与值“2”不匹配

问题描述 投票:0回答:8

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

c++ visual-studio debugging conan
8个回答
34
投票

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


23
投票

在某些情况下,混合

中的选项

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

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

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

/MD
/MT
/MDd
/MTd


21
投票

混合二进制文件(目标文件)是原因之一;另一个(我遇到的)是发布版本中

_DEBUG
宏的错误定义。
_DEBUG
不是标准宏,而是 Microsoft 使用的。

在 Emacs 中编辑 .vcxproj 文件后,我在发布时错误输入了

_DEBUG
而不是
NDEBUG
,并且遇到了完全相同的构建错误。


2
投票

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

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


1
投票

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

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


1
投票

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


0
投票

在我的特定情况下,我在遵循他们的教程时将ConanCMake一起使用时遇到了此错误。当我生成 Visual Studio 项目时,它在发布模式下构建良好,但在调试模式下抛出此错误。

解决方案是生成一个带有调试库的单独的 Visual Studio 项目:

mkdir debug && cd debug
conan install --build=missing .. -s build_type=Debug
cmake ..

可以在发布模式下重复相同的操作:更改第 1 行和第 2 行中的目录,使用 ['None', 'Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'] 中的任何一个


-1
投票

对于解决方案中的每个项目,通过选择项目属性下的 下拉列表来编辑预处理器定义:C/C++ > 预处理器 > 预处理器定义。检查以确保评估值不包括 _DEBUG。 对于发布模式,将任何 _DEBUG 替换为 NDEBUG,即 NO DEBUG。 您必须对解决方案中的每个项目执行此操作。 即使有一个项目也会迫使 Microsoft 使用调试库并生成您遇到的错误。

© www.soinside.com 2019 - 2024. All rights reserved.