visual studio中的_ITERATOR_DEBUG_LEVEL错误

时间:2011-01-19 18:11:15

标签: c++ visual-studio winapi compiler-construction release

我试图在Windows 7上的Visual Studio 2010中编译JRTPLIB。这是一场真正的噩梦...但我至少要缩小问题范围。

这是剩下的。

Error   3   error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in client.obj   C:\Users\Johan-bar\Documents\Visual Studio 2010\Projects\client\client\jrtplib.lib(rtpsession.obj)  client

我googled一吨,原因似乎是一个是在调试模式下编译而另一个是在发布模式下编译。

我的目标是编译Release可执行文件,因为我想在不同的计算机上进行测试。

1)哪一个不处于发布模式,JRTPLIB或客户端(我的,正在尝试编译的那个)?

2)如何更改ITERATOR_DEBUG_LEVEL?两者都使用运行时库/ MT和预处理器定义WIN32,_MT,以及我猜的默认值。

干杯

3 个答案:

答案 0 :(得分:12)

使用-D_ITERATOR_DEBUG_LEVEL = 0选项编译您使用的所有内容。默认情况下在VS 2010 Release模式下是这样,但有些东西仍然使用其他选项构建,因此不是二进制兼容的。

在较旧的视觉工作室中有_SECURE_SCL,我不确定某些代码是否仍然可以使用它。把某些地方(比如stdafx.h)放到这些匹配的静态检查中。

#if _ITERATOR_DEBUG_LEVEL == 0 && _SECURE_SCL != 0 
#error _SECURE_SCL != 0 while _ITERATOR_DEBUG_LEVEL == 0 
#endif 

如果你想看看_ITERATOR_DEBUG_LEVEL有什么价值,你可以在代码中使用一些#pragma消息来告诉你。

答案 1 :(得分:8)

解决方案:

Project Pages >> Configuration Properties >> C,C++ >> Preprocessor >> Preprocessor Definitions

添加_ITERATOR_DEBUG_LEVEL=0。 另见:How to set _ITERATOR_DEBUG_LEVEL in VS2010?

答案 2 :(得分:0)

我发现了另一种产生这些错误的方法。

我使用Visual Studio 2010批处理构建来构建平台和配置的所有可能组合,我遇到了这些错误。查看输出显示批处理构建不符合项目依赖性 - 因此使用新编译的Debug obj文件链接来自Release构建的陈旧库。

在构建输出中的几行之后,它构建了库的Debug版本。

进行"批量构建"手工(即手动选择平台和配置的各种组合)产生了干净的构建。

道德:不要使用Visual Studio 2010批量构建。我不知道他们是否已在VS的更高版本中解决此问题。