我正在尝试使用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
答案 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,反之亦然!