错误检测到LNK2038不匹配

时间:2012-11-09 10:28:48

标签: visual-studio-2010 cygwin

我正在尝试使用Geant4(物理库)运行代码并尝试在VS2010上编译它。 似乎Geant4的某些库与我的C ++库存在问题匹配。在编译中,我得到了大量类似的错误,如下所示:

  

libG4Tree.a(G4ASCIITree.o):错误LNK2038:检测到不匹配   '_ITERATOR_DEBUG_LEVEL':值'0'与值'2'不匹配   Workshopexample1.OBJ

我的G4库中有100多个不同的.a文件,并且出现此错误。 我真的需要关闭调试级别('0')。否则G4代码将需要数年才能运行。所以,我需要找到我的VS2010中定义的_ITERATOR_DEBUG_LEVEL的位置,并将其设置为“0”以避免不匹配。有人可以帮忙吗? 干杯, Payam

1 个答案:

答案 0 :(得分:2)

错误可能是通过将调试版本和发布版本混合在同一个可执行文件或dll中引起的。

使用/ MDd而不是/ MD发布静态库的版本,而应用程序是/ MD发行版。在静态lib项目中设置正确的/ MD解决了这个问题。

这在项目属性

中完成
Select Configuration Properties / C C++ / Code Generation in the tree
and the option Runtime Library set to the same on all your dependencies projects and application.

搜索_ITERATOR_DEBUG_LEVEL和_SECURE_SCL删除它们或在所有项目和源中正确设置它们并重建所有内容。

_ITERATOR_DEBUG_LEVEL = 0 // disabled (for release builds)
_ITERATOR_DEBUG_LEVEL = 1 // enabled (if _SECURE_SCL is defined)
_ITERATOR_DEBUG_LEVEL = 2 // enabled (for debug builds)

简而言之,您可能正在混合发布和调试dll。不要在调试中链接发布dll,反之亦然!