2012-04-06 72 views
-3

我想編譯升壓計時器,它是拋出錯誤,我不明白。它讓我覺得定時器庫在atm處被破壞:升壓計時器不編譯

#include <string> 
#include <boost/lexical_cast.hpp> 
#include <boost/timer/timer.hpp> 

int main(int argc, char **argv) { 
// auto_cpu_timer t; 
    std::cout << boost::lexical_cast<std::string>(2.0) << std::endl; 

    return 0; 
} 

沒有#include for timer.hpp它編譯。有了它,它會拋出以下錯誤:

Invoking: GCC C++ Linker 
g++ -Lsrc -o "timetest" ./src/main.o 
./src/main.o: In function `__static_initialization_and_destruction_0': 
/usr/include/boost/system/error_code.hpp:214: undefined reference to `boost::system::generic_category()' 
/usr/include/boost/system/error_code.hpp:215: undefined reference to `boost::system::generic_category()' 
/usr/include/boost/system/error_code.hpp:216: undefined reference to `boost::system::system_category()' 
collect2: ld returned 1 exit status 
make: *** [timetest] Error 1 

這是否意味着計時器庫被摧毀atm?我正在使用Boost 1.49.0。

謝謝!

+1

難道真的要求太多了一點谷歌福?我們在這裏有數千個「未定義的參考」問題。他們都是一樣的。 – pmr 2012-04-06 14:14:04

+0

您是否直接複製粘貼該程序,或者是否輸入了該程序?你好像至少錯過了'#include '。 – 2012-04-06 14:14:49

+0

@pmr我做了幾分鐘的谷歌和stackoverflow,但我的查詢過於具體,我猜。我的錯! – 2012-04-06 14:19:36

回答

5

假設您使用gcc,請嘗試將-lboost_system添加到您的編譯器命令行以便與該庫鏈接。

+0

我想我仍然混淆了包含和庫鏈接。現在就工作,謝謝! – 2012-04-06 14:11:59

+0

也-lboost_timer – xinthose 2015-07-25 23:45:21

0

你也必須包含基本的boost系統頭文件。選中您需要的默認標題的示例之一。

+0

這不是關於標題,而是鏈接庫 – 2012-04-06 14:01:57

+0

woops,沒有看到它是一個鏈接器錯誤。上次我嘗試使用SO移動應用程序來回答問題= \ – 2012-04-06 14:12:46

2

這些錯誤與Boost Timer庫無關,並且不存在,庫不會損壞。由於這introductory material指定,

Boost.Timer是作爲一個單獨編譯的庫,所以你必須在你的鏈接器中找到一個位置安裝二進制文件。

...並添加按照庫作爲命令行參數調用編譯器時(使用-lLIBNAME),或者如果使用IDE,CMake的或Makefile文件將它們添加到您的項目配置。確保您在做便宜的評論之前首先了解Boost Getting Started guide中討論的細節。

0

你忘記鏈接boost_system。 像這樣:

g++ -Lsrc -o "timetest" ./src/main.o -lboost_system 

將罰款