2012-02-13 87 views
0

使用Boost.Asio的使用MinGW当我试图编译在Boost.Asio的例子找到了一个非常简单的例子,但我得到了链接错误的。这是我使用的是完整的命令行:连接错误在Windows 7

 
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

您是否试图链接在gcc中编译的目标文件与您在g ++中编译的程序?

`undefined reference to `__gxx_personality_v0'` 

通常关系到指定gcc作为编译器时,你的意思是指定G ++

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

E.g.由MinGW的编译程序的目标文件(版本3.4.5是SJLJ)和增强通过GCC编译(版本4.4或以上版本是DW2)?

如果是这样的话,那么确保你的编译器和您链接库来用相同的编译器,有两种SJLJ异常处理或DW2异常处理编译。

在其网站上MinGW的4.40测试版现在默认有DW2,并假设升压与DW2编译,那么就应该编译和链接干净。

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

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

对于DW2如何工作see here

+0

嗯,我想我使用DW2版本,并提升编译时sjlj – sreejith 2012-02-15 05:33:53

+0

都尝试类型的异常处理方法,但仍然是相同的结果。 当我使用了基于DW2, 我越来越: 未定义的参考'__gxx_personality_sj0' 未定义的参考'_Unwind_SjLj_Register” 当我试图用SJLJ 我越来越: 未定义的参考' _Unwind_Resume” __gxx_personality_v0 – sreejith 2012-02-15 06:00:17

+0

确保两个编译器,链接器和库都是建立与任何SJLJ或DW2,你应该得到既不错误 – Appleman1234 2012-02-15 06:19:16