3

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

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

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

4

1 回答 1

2

该错误可能是由于在同一可执行文件或 dll 中混合调试版本和发布版本而导致的。

使用 /MDd 而不是 /MD 的静态库的发布版本,而应用程序在发布中是 /MD。在静态库项目中设置正确的 /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,反之亦然!

于 2014-08-05T11:29:14.737 回答