我刚刚将 Visual Studio (C++) 解决方案移至另一台计算机,设置了我所看到的所有目录和设置,并对解决方案进行了清理/重建。我在编译时遇到一堆 .obj 的错误,不知道该怎么办。
您似乎正在混合使用不同设置构建的目标文件。尝试进行完全干净的重建并检查所有项目文件设置以确保 _ITERATOR_DEBUG_LEVEL 宏相同(例如,您没有混合调试和发布构建对象)。
在某些情况下,混合
中的选项属性>配置属性>C/C++>代码生成>运行时 图书馆
在 包含的库 和 当前工作项目 可能会导致这个问题。
根据使用情况,在所有项目中统一将其设置为
/MD
或 /MT
或 /MDd
或 /MTd
。
混合二进制文件(目标文件)是原因之一;另一个(我遇到的)是发布版本中
_DEBUG
宏的错误定义。 _DEBUG
不是标准宏,而是 Microsoft 使用的。
在 Emacs 中编辑 .vcxproj 文件后,我在发布时错误输入了
_DEBUG
而不是 NDEBUG
,并且遇到了完全相同的构建错误。
我已经尝试解决这个问题五天了。点云库 (PCL) 代码在调试模式下构建成功,但在发布模式下失败。
我已经多次重新配置我的库,但没有帮助。我发现问题是发布版本继承了_DEBUG,所以我在项目属性>>预处理器>>处理器定义下取消选中它,并解决了。
我(奇怪地)发现 _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。
在我的 VS2019 项目的调试版本中尝试解决问题几天后。设置项目>>属性>>C/C++>>处理器_HAS_ITERATOR_DEBUGGING=0定义对我有用。
在我的特定情况下,我在遵循他们的教程时将Conan与CMake一起使用时遇到了此错误。当我生成 Visual Studio 项目时,它在发布模式下构建良好,但在调试模式下抛出此错误。
解决方案是生成一个带有调试库的单独的 Visual Studio 项目:
mkdir debug && cd debug
conan install --build=missing .. -s build_type=Debug
cmake ..
可以在发布模式下重复相同的操作:更改第 1 行和第 2 行中的目录,使用 ['None', 'Debug', 'Release', 'RelWithDebInfo', 'MinSizeRel'] 中的任何一个
对于解决方案中的每个项目,通过选择项目属性下的