链接升压库时出现的另一个"undefined reference"错误

Another "undefined reference" error when linking boost libraries

本文关键字:另一个 undefined reference 错误 链接      更新时间:2023-10-16

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

#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-redhat-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 文件。我在这里错过了什么?

必须将-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较新时,您的问题可能是其他问题。

-lrt添加到您的 g++ 调用中 – clock_gettimelibrt.so 中。

相关文章: