I've seen several other posts that deal with this exact same issue. However, none of their solutions seem to work for me. I am compiling the following code:
#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; }
I am compiling from the command line using:
$ g++ matrix_test.cpp -o matrix_test -lboost_system -lboost_timer
and receiving the following error:
usr/lib/gcc/i686-redhat-linux/4.7.0/../../../libboost_timer.so: undefined reference to `boost::chrono::steady_clock::now()'
collect2: error: ld returned 1 exit status
If I add -lboost_chrono when I compile, I get this error:
/usr/lib/gcc/i686-redhat-linux/4.7.0/../../../libboost_chrono.so: undefined reference to `clock_gettime'
collect2: error: ld returned 1 exit status
I can trace clock_gettime to sys/time.h. Unfortunately, I cannot find a corresponding .so file to link to. What am I missing here?
You must add -lrt
to your link libraries
g++ matrix_test.cpp -o matrix_test -lboost_system -lboost_timer -lboost_chrono -lrt
Update (2016-08-31)
This still seems to be an issue. When you lookup man clock_gettime
, this leads to the solution (-lrt
), but it also says
Link with -lrt (only for glibc versions before 2.17).
So when your glibc is newer, your problem might be something else.