错误LNK2038:检测到不匹配

时间:2013-05-07 05:50:22

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

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

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库是第三方软件,DataHelper是我的类。

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

我尝试在预处理器定义中设置_SECURE_SCL,然后得到:

_ITERATOR_DEBUG_LEVEL=2

任何人都可以确认问题是在我这边或在第三方方面,如果它是第三方库,建议任何解决方法吗?

由于 梅拉妮

3 个答案:

答案 0 :(得分:1)

如果在发布模式下不支持_ITERATOR_DEBUG_LEVEL > 1并且错误消息暗示_ITERATOR_DEBUG_LEVEL中的gurobi_c++mdd2010.lib == 2,则该lib或其某个依赖项必须是Debug构建。

可能值得调查这个角度,所以check here并确保根据项目设置链接正确的lib。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

mdd中的第二个d代表调试。