2011-07-08 86 views
0

我必須爲線程創建boost庫。所以我給了命令將程序鏈接到boost線程庫時出錯

./bootstrap.sh 

在boost_1_46_1目錄中。然後

bjam --toolset=gcc --build-type=complete --with-thread link=static stage 

當我試圖編譯一個簡單的程序涉及線程,使用下面的命令,我得到錯誤。

g++ -I/home/sharatds/Downloads/boost_1_46_1 /home/sharatds/Downloads/boost_1_46_1/stage/lib/libboost_thread.a main.cpp -o ini 
main.cpp:(.text+0x804): undefined reference to `boost::thread::join()' 
main.cpp:(.text+0x9ec): undefined reference to `boost::thread::~thread()' 

我錯過了什麼嗎?

回答

1

我認爲你的構建命令格式不正確。您正在以不同尋常的方式明確列出歸檔庫,並且我認爲GCC忽略或誤解了它。

嘗試將你的構建分成兩步。將.cpp文件編譯爲.o文件,然後將另一個鏈接.o與boost_thread歸檔庫併發出可執行文件。

g++ -I/home/sharatds/Downloads/boost_1_46_1 main.cpp -o main.o 
g++ main -o ini -L/home/sharatds/Downloads/boost_1_46_1/stage/lib/ -lboost_thread 

上面的第一行將main.cpp編譯成一個目標文件。第二行將您的目標文件與boost_thread庫鏈接起來。 -L參數的作用與-I參數非常相似,但爲庫提供搜索路徑,而不是包含文件。

而且,我懷疑你的參數-I實際上應該是

-I/home/sharatds/Downloads/boost_1_46_1/stage/include

所以要包括從構建結果的標題,而不是從源代碼樹本身。只是猜測那一個。