2013-04-14 71 views
1

試圖構建一個標準的Boost ::線程示例,我在互聯網上發現,我得到了Boost頭文件thread_data.hpp引發的多個錯誤,我不直接鏈接到哪個I假設通過Boost鏈接。 (我在我的實際程序中也得到了相同的錯誤,但我使用的是示例代碼,以確保它與我的代碼沒有問題。)C++鏈接器錯誤使用Boost線程

以下是我在boost :: thread教程中找到的示例代碼:

#include <iostream> 
    #include <boost/thread.hpp> 
    #include <boost/date_time.hpp> 

    void workerFunc() 
    { 
     boost::posix_time::seconds workTime(3); 
     std::cout << "Worker: running" << std::endl; 

     // Pretend to do something useful... 
     boost::this_thread::sleep(workTime); 
     std::cout << "Worker: finished" << std::endl; 
    } 

    int main(int argc, char* argv[]) 
    { 
     std::cout << "main: startup" << std::endl; 
     boost::thread workerThread(workerFunc); 
     std::cout << "main: waiting for thread" << std::endl; 
     workerThread.join(); 
     std::cout << "main: done" << std::endl; 
     return 0; 
    } 

這裏是我的生成命令:

mingw32-g++.exe -LC:\projects\boost\lib -o bin\Debug\Guardian.exe obj\Debug\Scratch.o -lboost_filesystem-mgw47-mt-1_53 -lboost_date_time-mgw47-mt-1_53 -lboost_system-mgw47-mt-1_53 -lboost_thread-mgw47-mt-1_53 

(請注意,我上午鏈接boost.thread庫)。

這裏是拋出的第一個錯誤:

C:\projects\boost\include\boost-1_53\boost\thread\win32\thread_data.hpp|123|undefined reference to `_imp___ZTVN5boost6detail16thread_data_baseE'| 

在代碼塊我得到指着行頭文件thread_data.hpp作爲錯誤的來源123:

//#if defined BOOST_THREAD_PROVIDES_INTERRUPTIONS 
      , interruption_handle(create_anonymous_event(detail::win32::manual_reset_event,detail::win32::event_initially_reset)) 
      , interruption_enabled(true) 

沒有忘記鏈接圖書館?我一直在使用Boost沒有問題,直到現在我試圖使用線程庫。我是Boost新手,不知道可能會導致錯誤的原因。

+0

我剛剛在命令行中用MinGW-32構建了你的例子,它的構建就很好。我用過:'g ++ main.cpp -IC:\ Dev \ lib2 \ mingw32 \ boost \ boost1530 -LC:\ Dev \ lib2 \ mingw32 \ boost \ boost1530 \ lib -o main.exe -lboost_filesystem-mgw47-mt- d-1_53 -lboost_date_time-mgw47-mt-d-1_53 -lboost_system-mgw47-mt-d-1_53 -lboost_thread-mgw47-mt-d-1_53。你有沒有試過從命令行構建它? – PCaetano

+0

另一個問題 - 你是靜態鏈接還是連接鏈接?如果你是靜態鏈接,你可能需要'#define BOOST_THREAD_USE_LIB' – PCaetano

+0

使用上面提到的編譯器命令從命令行構建它,只會在命令控制檯而不是在CodeBlocks中產生相同的錯誤。 – user2109130

回答

0

嘗試向鏈接器添加-lpthread。