我正在尝试编译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,因此无法使用它。耻辱。
答案 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。
抱歉。