【问题标题】:Mingw multiple definition of _Unwind_resumeMingw _Unwind_resume 的多重定义
【发布时间】:2012-06-29 19:31:33
【问题描述】:

我知道已经有人问过与此类似的问题,但我几个小时都无法解决此问题。

基本上我有一个包含代码的 DLL 和一个调用它的应用程序。一切正常,但如果我将这两个放在我的开发环境之外,它会说程序无法启动,因为计算机中缺少libgcc_s_dw2 1.dll

考虑到它不是开发计算机,这很公平。所以为了分发,我添加了编译器标志“-static-libgcc -static-libstdc++”。我为 dll 和应用程序做了这个。

但是当我编译应用程序时出现错误:

“`_Unwind_Resume'的多重定义”

我认为这是由于 dll 和应用程序都内置了静态库,确实如此。但是如果两者都没有内置静态库,程序将无法在最终用户机器上运行。

如何在不依赖 mingw 库的情况下消除此错误?我的 IDE 是 Code::Blocks。

大卫

编辑:这是构建链接到 dll 的应用程序时的构建日志:

c:/mingw/bin/../lib/gcc/mingw32/4.6.2/libgcc_eh.a(unwind-dw2.o):(.text+0x298c): multiple definition of `_Unwind_Resume'

..\EquilibriumEngine\bin\Release\libEquilibriumEngine.dll.a(d000015.o):(.text+0x0): first defined here

collect2: ld returned 1 exit status

Process terminated with status 1 (0 minutes, 0 seconds)

2 errors, 0 warnings

【问题讨论】:

  • 您能否添加任何日志 Code::Blocks 用于构建(包括用于编译/链接的命令以及任何警告和错误结果)?
  • 也许这个答案stackoverflow.com/questions/8765215/… 给了你一些错误提示。

标签: c++ mingw codeblocks


【解决方案1】:

一种通常有效的 hacky 解决方法是将其添加到您的链接器标志中:

-Wl,-allow-multiple-definition

【讨论】:

    【解决方案2】:

    请仅使用链接器标志-static 重复。但是(如果可能的话)将libgcc_s_dw2 1.dll 包含到您的exe 中并分发两者。您可以从MinGW/bin 文件夹中获取dll。

    还请确保您没有将 -static-libgcc 添加到编译器,而是 linker-flags!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-12
      • 2017-09-03
      • 1970-01-01
      • 2013-10-27
      • 1970-01-01
      • 1970-01-01
      • 2020-06-27
      相关资源
      最近更新 更多