在Windows 7上使用带有MingW的Boost.asio时出现链接器错误

时间:2012-02-13 05:16:33

标签: c++ boost-asio linker-errors

我尝试编译一个在boost.asio示例中找到的非常基本的示例,但我收到了链接器错误。这是我正在使用的完整命令行:

mingw32-c++.exe -L..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib -L..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib  -o bin\Debug\CPP_WITHOUT_FEAR_1st_APP.exe obj\Debug\main.o obj\Debug\prog_2.o obj\Debug\timer.o obj\Debug\convert.o   -lwsock32 ..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a 

我得到的错误:

..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.text+0x148): undefined reference to `_Unwind_Resume'
..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.text+0x16c4): undefined reference to `_Unwind_Resume'
..\..\Important\docs\c++\boost\boost_1_48_0\stage\lib\libboost_system-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.eh_frame+0x12): undefined reference to `__gxx_personality_v0'

试图弄清楚出了什么问题,但我无法找到答案。 谢谢, SREE

1 个答案:

答案 0 :(得分:0)

您是否尝试将使用gcc编译的目标文件与使用g ++编译的程序链接?

`undefined reference to `__gxx_personality_v0'` 

通常与在指定g ++

时指定gcc作为编译器有关

如果不是这种情况,您是尝试使用DW2(Dwarf-2)编译器链接使用SJLJ(setjmp / longjmp)编译的目标文件,反之亦然?

E.g。 mingw编译的程序的目标文件(版本3.4.5是SJLJ)和gcc编译的boost(版本4.4+是DW2)?

如果是这种情况,那么请确保您的编译器和链接的库是使用相同的编译器编译的,该编译器具有SJLJ异常处理或DW2异常处理。

现在,他们网站上的minGW 4.40测试版默认使用DW2,假设使用DW2编译了boost,那么应该编译并链接干净。

至于SJLJ和DW2是什么,它们是异常处理的方法。 SJLJ使用setjmp和longjump,而DW2使用DWARF-2(或DWARF-3)调试信息。 SJLJ较慢,但DW2需要更多空间,导致大型二进制文件。

有关异常处理的更多信息,请参阅here

有关DW2的工作原理see here