Boost chrono run_timer未定义引用

Boost chrono run_timer undefined reference

本文关键字:未定义 引用 timer chrono run Boost      更新时间:2023-10-16

我试图在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,因此我无法使用它。耻辱。

这个例子在评审之前就已经存在了,并且使用了一些不属于评审的Chrono库的接口。我忘了把它去掉。完成于1.48年。

抱歉打扰了

尝试颠倒链接顺序。

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

我不确定icc是如何做到的,我甚至不确定GCC是如何与-l一起做到的,但我模糊地记得,在某些情况下,链接只有在命令行上链接库之前的对象中使用符号时才会将符号带入可执行文件。

您还需要链接到Boost.System

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

更多信息请参考手册:

除了链接与Boost。Chrono库还需要与Boost链接。系统库。一旦提升。System将被配置为一个头文件,只使用boostrongystem_inline,你不需要链接它。