2012-02-13 110 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