链接boost库时出现另一个“未定义的引用”错误

时间:2012-11-30 21:21:28

标签: c++ boost undefined-reference

我已经看到其他几个帖子处理这个完全相同的问题。但是,他们的解决方案似乎都不适合我。我正在编译以下代码:

#include <boost/numeric/ublas/matrix.hpp>
#include <boost/numeric/ublas/io.hpp>
#include <boost/timer/timer.hpp>

using namespace boost::numeric::ublas;

int main(){    
   matrix<double> mat1 (3,3);
   matrix<double> mat2 (3,3);
   matrix<double> mat3 (3,3);

   unsigned k=0;

   for(unsigned i = 0; i < mat1.size1(); ++i){
      for(unsigned j = 0; j < mat1.size2(); ++j){
         mat1(i,j) = k;
         mat2(i,j) = 2*k++;
      }   
   }   

   k=0;
   if(1){
      boost::timer::auto_cpu_timer t;
      while(k<1000){
         mat3 = prod(mat1,mat2);
         k++;
      }   
   }   
   return 0;
}

我正在使用命令行编译:

  

$ g ++ matrix_test.cpp -o matrix_test -lboost_system -lboost_timer

并收到以下错误:

  

usr / lib中/ GCC / i686的-红帽-LINUX / 4.7.0 /../../../ libboost_timer.so:   未定义的引用`boost :: chrono :: steady_clock :: now()'
  collect2:错误:ld返回1退出状态

如果我在编译时添加-lboost_chrono,我会收到此错误:

  

/usr/lib/gcc/i686-redhat-linux/4.7.0 /../../../ libboost_chrono.so:   未定义的引用`clock_gettime'
  collect2:错误:ld返回1退出状态

我可以将clock_gettime跟踪到sys / time.h。不幸的是,我找不到要链接的相应.so文件。我在这里缺少什么?

2 个答案:

答案 0 :(得分:18)

您必须将-lrt添加到链接库

g++ matrix_test.cpp -o matrix_test -lboost_system -lboost_timer -lboost_chrono -lrt

更新(2016-08-31)

这仍然是一个问题。当您查找man clock_gettime时,这会导致解决方案(-lrt),但它也会说

  

与-lrt链接(仅适用于2.17之前的glibc版本)。

所以当你的glibc更新时,你的问题可能就是其他问题。

答案 1 :(得分:8)

-lrt添加到您的g ++调用中,clock_gettime位于librt.so