Еще "неопределенная ссылка" ошибки при компоновке библиотеки Boost


Я видел несколько других сообщений, которые касаются этой же самой проблемы. Однако ни одно из их решений, похоже, не работает для меня. Я компилирую следующий код:

#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.СРР -о matrix_test -lboost_system -lboost_timer

И получение следующей ошибки:

УСР/Либ/ССЗ/i686 в-в RedHat-Linux и 4.7.0/../../../libboost_timer.так: неопределенная ссылка на 'boost:: chrono:: steady_clock:: now ()'
collect2: error: ld вернул 1 состояние выхода

Если я добавляю -lboost_chrono при компиляции, я получаю эту ошибку:

/usr / lib/gcc / i686-redhat-linux/4.7.0 / ../../.. / libboost_chrono. so: неопределенная ссылка на 'clock_gettime'
collect2: error: ld вернул 1 состояние выхода

Я могу проследить clock_gettime до sys / time.h. к сожалению, я не могу найти соответствующий файл. so для ссылки. Чего мне здесь не хватает?

2 11

2 ответа:

Вы должны добавить -lrt в свои библиотеки ссылок

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

Обновление (2016-08-31)

Это все еще кажется проблемой. Когда вы ищете man clock_gettime, это приводит к решению (-lrt), но он также говорит

Ссылка с -lrt (только для версий glibc до 2.17).

Поэтому, когда ваш glibc новее, ваша проблема может быть чем-то другим.

Добавьте -lrt к вашему вызову g++ - clock_gettime находится в librt.so.