2010-06-17 20 views
2

我有這個程序,它使用套接字的Boost :: Asio。我幾乎改變了Boost示例中的一些代碼。該程序編譯和運行就像它應該在Windows中的VS.但是,當我在Linux上編譯程序並運行它時,出現分段錯誤。升壓程序將無法在Linux上工作

我發佈的代碼here

我用它來編譯它的命令是這樣的:

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include 
-I/appl/htopopt/Linux_x86_64/boost_1_43_0/include 
mpqs.cpp mpqs_polynomial.cpp mpqs_host.cpp -o mpqs_host 
-L/appl/htopopt/Linux_x86_64/NTL-5.4.2/lib -lntl 
-L/appl/htopopt/Linux_x86_64/gmp-4.2.1/lib -lgmp -lm 
-L/appl/htopopt/Linux_x86_64/boost_1_43_0/lib -lboost_system 
-lboost_thread -static -lpthread 

註釋掉的代碼,我發現我得到的分割故障是由於以下行:

boost::asio::io_service io_service; 

任何人都可以提供任何幫助,至於什麼可能是問題(和解決方案)?

謝謝!

編輯:我試圖改變程序的小例子,不使用其他庫或標題,只是提升/ asio.hpp:

#define DEBUG 0 

#include <boost/asio.hpp> 

int main(int argc, char* argv[]) { 
    boost::asio::io_service io_service; 
    return 0; 
} 

我也刪除其他圖書館夾雜物和編譯鏈接,然而,這最小的例子仍然給我一個分段錯誤。

+0

我懷疑這是答案,但我遇到了很大的問題,看起來就像在linux上使用boost和gold鏈接器一樣。切換回舊的ld鏈接器爲我解決了所有的問題。 – McBeth 2010-06-17 21:08:33

+0

你正在使用哪種編譯器和Linux操作系統?如果你最小的例子仍然是段錯誤,我會開始看你的環境。 – 2010-06-17 21:18:29

回答

4

-static選項的GCC聯機文檔:

在支持動態鏈接系統,這樣可以防止與共享庫進行鏈接。

Boost可以支持靜態唯一鏈接,但前提是OS包維護者構建它時才這樣配置。你確定你應該使用這個標誌嗎?如果沒有,嘗試重新編譯沒有標誌,看看是否沒有照顧到這個問題。

+1

這可能是問題,沒有'-static'你的測試程序編譯並運行在我的fedora12框上。如果我沒有記錯,你可能無法靜態編譯任何需要pthread的東西。 – zdav 2010-06-17 21:40:15