链接器错误LNK2038:在发布模式下检测到不匹配

时间:2010-10-31 05:07:50

标签: c++ visual-studio-2010 linker pcre release-mode

我正在尝试将我的小应用程序从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 个答案:

答案 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来实现。