2011-11-21 78 views
0

我收到一個編譯錯誤,試圖從文檔編譯一個簡單的測試程序。在編譯期間提升未定義的參考

C:\DOCUME~1\A\LOCALS~1\Temp\ccRsXzHu.o:tester.cpp:(.text+0xa6): undefined reference to  `_imp___ZN5boost6thread4joinEv' 
C:\DOCUME~1\A\LOCALS~1\Temp\ccRsXzHu.o:tester.cpp:(.text+0xb4): undefined reference to  `_imp___ZN5boost6threadD1Ev' 
C:\DOCUME~1\A\LOCALS~1\Temp\ccRsXzHu.o:tester.cpp:(.text+0xcf): undefined reference to  `_imp___ZN5boost6threadD1Ev' 
C:\DOCUME~1\A\LOCALS~1\Temp\ccRsXzHu.o:tester.cpp: (.text$_ZN5boost11this_thread18interruptible_waitEy[boost::this_thread::interruptible_wait( unsigned long long)]+0x4a): undefined reference to  `_imp___ZN5boost11this_thread18interruptible_waitEPvNS_6detail7timeoutE' 
C:\DOCUME~1\A\LOCALS~1\Temp\ccRsXzHu.o:tester.cpp:  (.text$_ZN5boost6threadC1IPFvvEEET_NS_10disable_ifINS_14is_convertibleIRS4_NS_6detail13thre ad_move_tIS4_EEEEPNS0_5dummyEE4typeE[boost::thread::thread<void (*)()>(void (*)(),  boost::disable_if<boost::is_convertible<void (*&)(), boost::detail::thread_move_t<void (*)()> >, boost::thread::dummy*>::type)]+0x23): undefined reference to  `_imp___ZN5boost6thread12start_threadEv' 
collect2: ld returned 1 exit status 

我的窗口上使用mingw的4.5和g ++ 4.5.2。 Boost版本v1.4.8。

我希望有人能幫我解決這個問題。

謝謝。

+2

它看起來像你沒有與boost_thread鏈接。你能發佈你的編譯/鏈接命令嗎? –

+0

這似乎是一個鏈接問題。你有沒有告訴它鏈接到適當的庫? – Kevin

+0

是的,我使用了g ++ -o tester.exe tester.c。我也用-I/location/to/boostfolder做了一次,但那也沒用。 – user1058431

回答

3

它看起來像你沒有鏈接到boost庫。

因爲它不是標準庫,所以Boost並不帶有窗口。您必須下載標題和庫,然後將標題包含在項目中,並在編譯時鏈接到庫。既然你使用的是g ++,這意味着在你的編譯命令中增加一個-l行。 -l行必須與您要使用的每個特定庫一起使用,您不能只指定boost目錄。

This page將幫助您開始使用Windows,this page將幫助您開始使用* nix平臺。

一旦你在你的榜樣編譯提升,那麼,你應該編譯程序與

g++ -o tester.exe -Lpath/to/boost/libraries/ -lboost_thread tester.c 
+0

是的,我看過那個頁面,雖然它根本沒有幫助。我用bjam安裝了它,並將頭文件移到正確的位置以便找到它。但所有這些都沒有做到。 – user1058431

+0

這不是標題問題。它一定可以在頭文件中找到boost函數的聲明。因爲這是一個「未定義的參考」,這意味着它是一個鏈接問題。試着找出包含你試圖調用的函數的函數定義的特定庫,然後將-l/path/to/that /庫添加到你的g ++命令中。 –

+0

您可能還會缺少-L參數,它告訴g ++在哪裏查找庫。請參閱我上面張貼的* nix鏈接中名爲「將您的程序鏈接到Boost庫」的部分。 –

0

確保你有正確關聯的所有存儲庫。

嘗試把此行第一,如果你的線程庫是靜態定義

#define BOOST_THREAD_USE_LIB 

此外,檢查出this thread