2017-02-01 40 views
2

我想鏈接一個簡單的程序與boost_timer使用g ++。該程序如下:DSO錯誤時試圖鏈接與boost_timer

#include <iostream> 
#include <boost/timer/timer.hpp> 

void linear_sum(int n); 
void quadratic_sum(int n); 
void sigmatic_sum(int n); 

int main(int argc, char *argv[]) 
{ 
    int m[5] = {100, 1000, 10000, 100000, 1000000}; 
    int tmp = 0; 

    for(tmp; tmp < 5; tmp++){ 
    std::cout << "Timing information for linear sum with n = " << m[tmp] << ":\n"; 
    linear_sum(m[tmp]); 

    std::cout << "Timing information for quadratic_sum with n = " << m[tmp] << ":\n"; 
    quadratic_sum(m[tmp]); 

    std::cout << "Timing information for sigmatic_sum with n = " << m[tmp] << ":\n"; 
    } 
} 

我試圖用編譯程序:

g++ -o a1main a1main.cpp -lboost_timer 

boost_timer頭文件和庫都是默認的編譯器搜索路徑內。我使用的是Slackware 14.2,它隨附了boost和boost編譯庫。我也在使用g ++自帶的股票編譯器。 (例如,它不是一個定製的工具鏈或任何東西)

我不知道我錯過了什麼,但我得到以下錯誤,當我嘗試編譯:

/usr/lib64/gcc/x86_64-slackware-linux/5.3.0/../../../../x86_64-slackware-linux/bin/ld: /tmp/ccRDEN9Q.o: undefined reference to symbol _ZN5boost6system15system_categoryEv /usr/lib64/libboost_system.so.1.59.0: error adding symbols: DSO missing from command line collect2: error: ld returned 1 exit status

的思考?我有一些,但他們或者通過添加-lboost_timer鏈接器標誌,我已經完成,或通過更改由於鏈接多個鏈接器標誌的順序解決了因爲我只是鏈接到這個庫,所以我沒有循環依賴關係,所以我在這裏問這個問題,看看是否還有別的東西可以嘗試。)

+2

我認爲你需要'-lboost_system'。 – Jonas

+0

或'-DBOOST_SYSTEM_NO_DEPRECATED'。 – Jonas

+0

你必須像@Jonas那樣添加-lboost_system – jamek

回答

2

您需要將-lboost_system添加到您的構建命令中。當您使用boost_timer時,您也可能需要boost_system。這也適用於其他許多助推庫,但不一定都是。