Boost chrono run_timer undefined reference

时间:2011-09-14 09:03:19

标签: c++ boost

我正在尝试编译boost发行版(1.47.0)中的run_timer_example.cpp示例,我使用的是英特尔编译器:

$ icc -I/usr/local/include -L/usr/local/lib -lboost_system -lboost_chrono run_timer_example.cpp
/tmp/iccUIv4Av.o: In function `main':
run_timer_example.cpp:(.text+0x33): undefined reference to `boost::chrono::run_timer::run_timer(boost::system::error_code&)'
run_timer_example.cpp:(.text+0xa5): undefined reference to `boost::chrono::run_timer::report(boost::system::error_code&)'

并使用GNU:

$ g++ run_timer_example.cpp -I/usr/local/include -L/usr/local/lib -lboost_system -lboost_chrono
/tmp/cc3ZOLLF.o: In function `main':
run_timer_example.cpp:(.text+0x16): undefined reference to `boost::chrono::run_timer::run_timer(boost::system::error_code&)'
/tmp/cc3ZOLLF.o: In function `boost::chrono::run_timer::~run_timer()':
run_timer_example.cpp:(.text._ZN5boost6chrono9run_timerD2Ev[_ZN5boost6chrono9run_timerD5Ev]+0x3b): undefined reference to `boost::chrono::run_timer::report(boost::system::error_code&)'
collect2: ld returned 1 exit status

我错过了什么?

编辑:我最终放弃了。看来我的Ubuntu安装无法正确处理Boost 1.47.0,因此无法使用它。耻辱。

3 个答案:

答案 0 :(得分:1)

尝试撤消链接顺序。

$ icc run_timer_example.cpp -I/usr/local/include -L/usr/local/lib -lboost_filesystem -lboost_chrono 

我不确定icc是如何做到这一点的,我甚至不确定GCC是如何用-l做的,但我依稀记得,在某些情况下,链接只会带来符号如果它们在命令行上链接库之前的对象中使用,则为可执行文件。

答案 1 :(得分:1)

您还需要链接到Boost.System

$ icc -I/usr/local/include -L/usr/local/lib -lboost_system -lboost_filesystem -lboost_chrono run_timer_example.cpp

有关更多信息,请参阅manual

  

除了与Boost.Chrono库链接外,您还需要与Boost.System库链接。一旦Boost.System可以配置为仅使用BOOST_SYSTEM_INLINED的标头,您将无需链接它。

答案 2 :(得分:1)

此示例在审核之前就已存在,并使用了一些不属于已审核的Chrono库的界面。我忘了把它删除。完成于1.48。

抱歉。