Другая ошибка undefined reference при связывании библиотек 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.cpp -o matrix_test -lboost_system -lboost_timer
и получив следующую ошибку:
USR/Library/GCC/i686-RedHat-Linux/4.7.0/../../../libboost_timer.so: undefined ссылка на `boost:: chrono:: stable_clock:: now() '
collect2: error: ld возвращен 1 статус выхода
Если я компилирую -lboost_chrono, я получаю эту ошибку:
/usr/lib/gcc/i686-redhat-linux/4.7.0/../../../libboost_chrono.so: undefined ссылка на `clock_gettime '
collect2: error: ld возвращен 1 статус выхода
Я могу отслеживать clock_gettime для sys/time.h. К сожалению, я не могу найти соответствующий файл .so для ссылки. Что мне здесь не хватает?
Ответы
Ответ 1
Вы должны добавить -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 более новый, ваша проблема может быть чем-то еще.
Ответ 2
Добавьте -lrt
в ваш вызов g++ - clock_gettime
находится в librt.so
.