2012-11-30 82 views
11

Ho visto diversi altri post che trattano esattamente questo stesso problema. Tuttavia, nessuna delle loro soluzioni sembra funzionare per me. Sto compilando il seguente codice: Un altro errore "riferimento non definito" durante il collegamento delle librerie di 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; 
} 

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?

risposta

18

È necessario aggiungere -lrt alle librerie di collegamento

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

Aggiornamento (2016-08-31)

Questo sembra essere ancora un problema. Quando si ricerca man clock_gettime, questo porta alla soluzione (-lrt), ma si dice anche

Collegamento con -lrt (solo per le versioni glibc prima 2.17).

Così quando il tuo glibc è più recente, il tuo problema potrebbe essere qualcos'altro.

+0

Wow. Come avrei mai potuto saperlo? Ragazzi, grazie mille! –

8

Add -lrt al tuo invocazione g ++ - clock_gettime è in librt.so.

Problemi correlati