2010-06-08 61 views
1

我編寫了一個客戶程序和一個服務器程序,它使用NTL庫和Boost :: Asio在C++中爲整數分解應用程序執行客戶機/服務器通信。在Linux上使用C++編譯我的Boost/NTL程序

雙方由幾個標題和cpp文件組成。在Visual Studio中,兩個項目都可以在Windows上單獨編譯。我所做的一切,就是添加NTL的include路徑和推動這兩個項目:

Additional include paths: "D:\Downloads\WinNTL-5_5_2\include";D:\boost_1_42_0 

此外,對於這兩個項目,我加了兩個庫路徑這兩個項目在VS:

Additional library directories: D:\boost_1_42_0\stage\lib;"D:\Documents\Visual Studio 2008\Projects\ntl\Debug" 

而且添加下其他依賴關係:

ntl.lib 

如上所述,它編譯在Windows上很好。但是,當我把代碼由大學提供的Linux機器上,我嘗試用下面的語句

c++ -I/appl/htopopt/Linux_x86_64/NTL-5.4.2/include -I/appl/htopopt/Linux_x86_64/boost_1_43_0/include client_protocol.cpp mpqs_client.cpp mpqs_sieve.cpp mpqs_helper.cpp -o mpqs_helper -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 -static 

編譯一旦這樣做,我得到一個huuuge錯誤,我貼here。任何想法如何解決這個問題,請?

回答

0

我不確定,但我懷疑你不能在靜態鏈接的二進制文件中執行多線程。

1

你正在得到很多錯誤來處理缺失的pthread符號。嘗試加入

-lpthread 

到您的連接線。

+0

嗨,我試着添加-lpthread。它解決了很多問題。然後我添加了-lboost_thread,現在我只是在這裏得到這個錯誤:http://pastebin.com/bVBKfcKh 對此有什麼幫助? – 2010-06-08 18:22:56

+0

@Martin:我認爲剩下的錯誤意味着,雖然你正在與你的應用靜態鏈接。你沒有將boost本身靜態鏈接到glibc,即你的boost庫仍然依賴於其他共享庫,比如glibc。 – Troubadour 2010-06-08 18:27:20

+0

我該如何解決這個問題?它會涉及再次編譯Boost?這是由大學系統管理員處理的,而不是我自己。 – 2010-06-08 18:31:22

相關問題