我尝试编译一个在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
答案 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