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

War*_*tin 38 c++ linker pcre visual-studio-2010 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
Run Code Online (Sandbox Code Playgroud)

我应该在哪里开始检查?

Ale*_*ski 36

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

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

VS 2010中的detect_mismatchpragma是导致此错误发出的原因.

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


小智 19

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

只需将_DEBUG添加到项目A(项目 - >属性 - > c ++ - >预处理器 - >预处理器定义),您就完成了.

  • 谢谢!或者在发布模式下,您可能在一个中定义了"NDEBUG",而在另一个中定义了NDEBUG. (3认同)

小智 5

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