错误LNK2038:不匹配检测

error LNK2038: mismatch detected

本文关键字:检测 不匹配 LNK2038 错误      更新时间:2023-10-16

关于这个问题有很多问题,但我正在努力找到适合我的答案。我有特定的错误信息:

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。我的文件中没有设置_SECURE_SCL

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

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

谁能确认问题是在我这边,还是在第三方这边,并建议任何解决方法,如果它是第三方库?

谢谢梅勒妮

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

这可能是值得调查的角度,所以检查这里,并确保您链接正确的库,基于您的项目设置。

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

需要链接gurobi_c++md2010。mdd2010.lib代替gurobi_c++ .

mdd中的第二个d表示调试