【问题标题】:VS2010 Debug Level MismatchVS2010 调试级别不匹配
【发布时间】:2010-12-16 22:51:18
【问题描述】:

我在测试我的库时注意到,如果我在项目处于调试模式时尝试链接到在发布模式下构建的静态库,VS2010 会抛出错误。相反,似乎相同如果我尝试使用 Release 中内置的项目链接到 Debug 中内置的库,就会发生这种情况。

error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '0' doesn't match value '2' in Main.obj

有没有办法绕过这种奇怪的行为?我只需要分发我的库的两个版本吗?另外,为什么会发生这种情况?

【问题讨论】:

    标签: c++ visual-studio-2010 linker static-libraries


    【解决方案1】:

    这不是一个奇怪的行为,编译器会根据宏定义、优化和其他标志创建不同的图像。最好不要分发静态库,因为用户必须拥有完全相同的编译器版本、标准库版本、相同的编译器标志,否则您将面临不兼容的风险:有时会出现链接错误,有时应用程序会崩溃,有时会出现错误行为.

    【讨论】:

    • 如果静态库动态库的用户必须在与构建库相同的版本和设置下编译他们的代码,库是如何分布的?
    【解决方案2】:

    图书馆作者没有很好的选择来指出混合和匹配不起作用。他们必须触发链接器错误,总是很棘手和令人困惑。在这里不起作用的是,您不能将使用 STL 类的库与启用了迭代器调试的库与禁用它的代码混合使用。非常根本的不匹配,那些模板类对象的大小不同。如果您真的想这样做,那么您必须禁用从该功能获得的诊断信息。

    这需要使用 _HAS_ITERATOR_DEBUGGING 宏 #defined 为 0 构建代码的调试版本。您确定要这样做吗?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-08-14
      • 2023-03-15
      相关资源
      最近更新 更多