【问题标题】:error LNK2038 mismatch detected检测到错误 LNK2038 不匹配
【发布时间】:2012-10-29 16:02:43
【问题描述】:

我正在尝试使用 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”以避免不匹配。有人可以帮忙吗? 干杯, 帕亚姆

【问题讨论】:

标签: visual-studio-2010 cygwin


【解决方案1】:

错误可能是由于在同一个可执行文件或 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,反之亦然!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-19
    • 2014-12-06
    • 2021-12-23
    • 2018-05-05
    • 2016-12-30
    • 2021-01-29
    • 1970-01-01
    • 2023-03-13
    相关资源
    最近更新 更多