Еще одна «неопределенная ссылка» ошибка при связывании буст-библиотек

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

#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 / Библиотека / GCC / i686-RedHat-линукс / 4.7.0 /../../../ libboost_timer.so:
неопределенная ссылка на `boost :: chrono :: stable_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 для ссылки. Что мне здесь не хватает?

11

Решение

Вы должны добавить -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 новее, ваша проблема может быть чем-то другим.

18

Другие решения

добавлять -lrt на ваш вызов g ++ - clock_gettime в librt.so,

8

По вопросам рекламы [email protected]