在windows 7上使用Boost.asio和MingW时链接器错误

Linker Error When Using Boost.asio With MingW on windows 7

本文关键字:MingW 链接 错误 asio Boost windows      更新时间:2023-10-16

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

mingw32-c++.exe-L.\。。\重要\docs\c++\boost\boost_1_48_0\ stage\lib-L.\。。\重要\docs\c++\boost\boost_1_48_0\sstage\lib-o bin\Debug\CPP_WITHOUT_FEAR_1st_APP.exe obj\Debug\main.o obj\Degug\prog_2.obj\Debug\timer.o obj\Debug\convert.o-lwsock32.\。。\重要\docs\c++\boost\boost_1_48_0\sstage\lib\libboostrongystem-mgw45-mt-1_48.a

我得到的错误:

..\..\重要\docs\c++\boost\boost_1_48_0\station\lib\libboostrongystem-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.text+0x148):未定义对"_Unwnd_Resume"的引用..\..\重要\docs\c++\boost\boost_1_48_0\station\lib\libboostrongystem-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.text+0x16c4):未定义对"_Unwnd_Resume"的引用..\..\重要\docs\c++\boost\boost_1_48_0\station\lib\libboostrongystem-mgw45-mt-1_48.a(error_code.o):error_code.cpp:(.eh_frame+0x12):未定义对"__gxx_personality_v0"的引用

我试着找出问题所在,但在任何地方都找不到答案。谢谢Sree

您是否试图将在gcc中编译的对象文件与在g++中编译的程序链接起来?

`undefined reference to `__gxx_personality_v0'` 

当您打算指定g++时,通常与指定gcc作为编译器有关

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

例如,您的程序的对象文件是由mingw编译的(版本3.4.5是SJLJ)和由gcc编译的boost(版本4.4+是DW2)吗?

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

他们网站上的minGW 4.40测试版现在默认为DW2,假设boost是用DW2编译的,那么它应该会干净地编译和链接。

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

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

有关DW2的工作原理,请参阅此处