代码之家  ›  专栏  ›  技术社区  ›  Wartin

链接器错误LNK2038:在释放模式中检测到不匹配

  •  37
  • Wartin  · 技术社区  · 15 年前

    我正在尝试移植我的一个小应用程序,从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 回复  |  直到 7 年前
        1
  •  37
  •   Alex Budovski    15 年前

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

    以释放模式重新编译PCRE以匹配您自己的应用程序。

    这个 detect_mismatch pragma 在VS2010中是导致这个错误被释放的原因。

    http://blogs.msdn.com/b/vcblog/archive/2009/06/23/stl-performance.aspx (搜索迭代器调试级别)

        2
  •  20
  •   Thomas    15 年前

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

    只需将“调试”添加到项目A(项目->属性->c++->预处理器->预处理器定义)即可。

        3
  •  4
  •   Quonux    12 年前

    这也可能是由于设置了预处理器定义 _HAS_ITERATOR_DEBUGGING=0

        4
  •  3
  •   Roman Bober    15 年前

    我的问题是依赖项目使用“使用多字节字符集”

    推荐文章