Mingw _Unwind_resume的多重定义

时间:2012-06-29 19:31:33

标签: c++ mingw codeblocks

我知道有一个类似的问题已经被问到,但我几个小时都无法解决这个问题。

基本上我有一个包含代码的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

2 个答案:

答案 0 :(得分:2)

通常可行的一种hacky解决方法是将其添加到链接器标志:

-Wl,-allow-multiple-definition

答案 1 :(得分:1)

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

还要确保你没有将-static-libgcc添加到编译器,但链接器 - 标志!