【问题标题】:error LNK2038: mismatch detected错误 LNK2038:检测到不匹配
【发布时间】:2013-05-07 05:50:21
【问题描述】:

关于这个问题有很多问题,但我很难找到适合我的答案。我有具体的错误信息:

gurobi_c++mdd2010.lib(Env.2010.omdd) : error LNK2038: mismatch detected for '_ITERATOR_DEBUG_LEVEL': value '2' doesn't match value '0' in DataHelper.obj

在 Visual Studio 2010 中,在 x64 版本中。 Gurobi 库是第 3 方软件,DataHelper 是我的班级。

在 DataHelper 中设置 _ITERATOR_DEBUG_LEVEL=0 并不能解决问题,而且我似乎没有链接到我的文件中的“调试”.lib 或 .dll。 _SECURE_SCL 未在我的文件中设置。

我尝试在预处理器定义中设置_ITERATOR_DEBUG_LEVEL=2,我得到:

C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\yvals.h(113): fatal error C1189: #error :  _ITERATOR_DEBUG_LEVEL > 1 is not supported in release mode.

任何人都可以确认问题是在我这边还是在第 3 方,如果是第 3 方库,可以提出任何解决方法吗?

谢谢 梅兰妮

【问题讨论】:

  • 碰巧,您是在发布级别构建一个 _SECURE_SCL=1 吗? (也看看这里:stackoverflow.com/questions/4080668/…
  • @Najzero:我刚查过,搜索找不到。
  • 如果在DataHelper中设置_ITERATOR_DEBUG_LEVEL=2会怎样?
  • @RogerRowland - 不同的错误:C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\yvals.h(113): 致命错误 C1189: #error : _ITERATOR_DEBUG_LEVEL > 1 是发布模式不支持。
  • @Melanie 那么您是否有可能将调试库链接到您的发布项目中?

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


【解决方案1】:

如果发布模式不支持_ITERATOR_DEBUG_LEVEL > 1,并且错误消息暗示gurobi_c++mdd2010.lib 中的_ITERATOR_DEBUG_LEVEL == 2,则该库或其依赖项之一必须是调试版本。

可能值得研究这个角度,所以check here 并确保根据您的项目设置链接正确的库。

【讨论】:

    【解决方案2】:

    我从 VS2005 迁移到 VS2010 的解决方案遇到了类似的问题。它有两个项目,一个静态库和一个可执行文件。显然有多种方法可以指示 VS2010 将静态库链接到可执行文件中。其中一种方法是通过可执行文件项目的属性页上的“框架和引用”。单击“添加新引用...”并在此处添加静态库,它将给出 OP 问题中描述的链接器错误,因为它不关心调试与发布版本 - 它会为两者获取相同的静态库,这会导致两者之一出错。我的解决方案是删除引用(单击“删除引用”),然后使用“链接器 > 输入 > 附加依赖项”和“链接器 > 常规 > 附加库目录”。

    【讨论】:

      【解决方案3】:

      您需要链接 gurobi_c++md2010.lib 而不是 gurobi_c++mdd2010.lib。

      mdd 中的第二个 d 代表 debug。

      【讨论】:

        猜你喜欢
        • 2012-10-29
        • 2018-04-19
        • 2014-12-06
        • 2021-12-23
        • 2018-05-05
        • 2016-12-30
        • 2021-01-29
        • 1970-01-01
        • 2023-03-13
        相关资源
        最近更新 更多