我正在尝试将我的小应用程序从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
我应该从哪里开始检查?
答案 0 :(得分:36)
您的应用程序正在以发布模式进行编译,但您正在链接PCRE的调试版本,该版本已设置/ MTd(或类似),从而导致CRT中迭代器调试级别不匹配。
在发布模式下重新编译PCRE以匹配您自己的应用程序。
VS 2010中的detect_mismatch
pragma是导致发生此错误的原因。
请参阅http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx(搜索_ITERATOR_DEBUG_LEVEL)
答案 1 :(得分:19)
我有同样的错误。在我的情况下,解决方案很简单:我有一个项目A取决于另一个项目B. B在调试模式下有一个预处理器定义_DEBUG而A没有。
只需将_DEBUG添加到项目A(项目 - >属性 - > c ++ - >预处理器 - >预处理器定义),您就完成了。
答案 2 :(得分:3)
我的问题是依赖项目使用“使用多字节字符集”
在Generl下 - >字符集。而其他项目有“无设定”值
答案 3 :(得分:3)
这也可以通过在项目B中设置预处理程序定义_HAS_ITERATOR_DEBUGGING=0
而不是在A中生成由B使用的lib来实现。