2013-02-20 114 views
0

剛剛開始使用boost線程的多線程;我有一個Hello World類型的程序在鏈接到線程庫期間失敗。以下是終端窗口輸出:C++鏈接失敗,未定義引用libboost_thread

g++ -Wall -I/usr/include HelloWorld.cpp -L/usr/local/lib -pthread -lboost_thread -lrt -lboost_system 
/tmp/ccTKHnfd.o: In function `main': 
HelloWorld.cpp:(.text+0x4a): undefined reference to `boost::thread::join()' 
HelloWorld.cpp:(.text+0x5b): undefined reference to `boost::thread::~thread()' 
HelloWorld.cpp:(.text+0x70): undefined reference to `boost::thread::~thread()' 
/tmp/ccTKHnfd.o: In function `boost::thread::thread<void (*)()>(void (*)(), boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)': 
HelloWorld.cpp: (.text._ZN5boost6threadC2IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE[_ZN5boost6threadC5IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thread_move_tIS4_EEEEPNS0_5dummyEE4typeE]+0x23): undefined reference to `boost::thread::start_thread()' 
collect2: ld returned 1 exit status 

我用aptitude安裝升壓開發庫1.48,相信我使用所有正確的標誌編譯器。我錯過了什麼?我的gcc是4.6.3。在此先感謝您的幫助

+2

如果找不到庫,則只能有2個原因:1)缺少庫的路徑; 2)庫名稱不正確。檢查兩個,你會成功。/usr/local/lib中確實存在boost_thread嗎? – 2013-02-20 08:48:44

回答

0

可能您需要在lib標誌後添加「-mt」後綴:例如-lboost_thread-mt 你可以仔細檢查你的boost庫路徑。

0

看起來像你找不到libboost_thread.so或libboost_thread.a。 /usr/local/lib中實際存在的是什麼?你可以做

ls /usr/local/lib | grep thread。如果你沒有看到libboost_thread.so或libboost_thread.a,那麼這就解釋了爲什麼你有未定義的引用 - 實現這些函數的對象實際上並不存在。

此外,如果您沒有看到libboost_thread.so,但您確實看到了libboost_thread.so.3.6或其他東西(表示特定版本),那麼您可以執行以下兩項操作之一:直接鏈接到或創建一個符號鏈接(即sudo ln -s /usr/local/lib/libboost_thread.so.3.6 /usr/local/lib/libboost_thread.so