43

我正在尝试将我的一个小应用程序从 Win XP 和 VS 2005 移植到 Win 7 和 VS 2010。

该应用程序在调试模式下编译并顺利运行,但是在发布模式下我收到以下错误:

pcrecpp.lib(pcrecpp.obj) : error LNK2038: mismatch detected for 
'_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in LoginDlg.obj

我应该从哪里开始检查?

4

5 回答 5

40

您的应用程序正在发布模式下编译,但您链接的是 PCRE 的调试版本,该版本设置了 /MTd(或类似),从而导致 CRT 中的迭代器调试级别不匹配。

在发布模式下重新编译 PCRE 以匹配您自己的应用程序。

VS 2010 中的detect_mismatch编译指示是导致此错误发出的原因。

请参阅http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx(搜索 _ITERATOR_DEBUG_LEVEL)

于 2010-10-31T05:17:53.643 回答
24

我有同样的错误。在我的情况下,解决方案很简单:我有一个项目 A 依赖于另一个项目 B。B 在调试模式下有一个预处理器定义 _DEBUG 而 A 没有。

只需将 _DEBUG 添加到项目 A(project->properties->c++->preprocessor->preprocessor definitions) 即可。

于 2011-01-21T15:35:36.153 回答
5

这也可能是由于_HAS_ITERATOR_DEBUGGING=0在项目 B 中而不是在 A 中设置预处理器定义造成的,其中 A 生成了 B 使用的库。

于 2011-11-09T21:34:07.857 回答
4


我的问题是依赖项目在通用 - >字符集下使用了“使用多字节字符集” 。而其他项目具有“无设置”值

于 2011-06-28T11:07:58.523 回答
0

就我而言,此错误是由缺少项目参考引起的。

大概添加冲突项目作为参考允许构建系统确保构建正确的配置(调试/发布)。

于 2022-01-20T11:42:32.723 回答