2011-01-19 94 views
20

我想在Windows 7上编译Visual Studio 2010中的JRTPLIB。这是一场真正的噩梦......但我至少缩小了这些问题。visual studio中的_ITERATOR_DEBUG_LEVEL错误

剩下的。

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 

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

我打算编译发布可执行文件,因为我想在不同的计算机上测试。

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

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

干杯

+1

我很想回答你的问题#1 - 这不是发布模式。从错误信息中不清楚。 “C/C++” - >命令行下的 – morgancodes 2014-05-28 19:12:13

回答

11

编译你-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消息中的代码来告诉你。

+0

-D_ITERATOR_DEBUG_LEVEL = 0它不会改变任何事情,仍然是同样的错误。我添加了你提到的代码,但没有触发。 – KaiserJohaan 2011-01-19 19:29:35

+0

您对jrtplib和客户端都使用了该选项吗?然后代码中的某些东西以某种方式改变它。 – 2011-01-19 19:49:59

0

我找到了另一种方法来产生这些错误。

我正在使用Visual Studio 2010批量构建来构建平台和配置的所有可能组合,并且我收到了这些错误。查看输出结果显示,批量构建不符合项目依赖关系 - 因此将发布版本的陈旧库与新编译的调试obj文件链接起来。

在构建输出后面的几行中,它构建了库的Debug版本。手动执行“批量构建”(即手动选择平台和配置的各种组合)产生了一个干净的构建。

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