2012-11-30 17 views
11

Ich habe mehrere andere Beiträge gesehen, die sich mit genau diesem gleichen Problem beschäftigen. Jedoch scheint keine ihrer Lösungen für mich zu funktionieren. Ich kompiliere den folgenden Code: Ein weiterer Fehler "undefined Referenz" beim Verknüpfen von Boost-Bibliotheken

#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?

Antwort

18

Sie müssen -lrt auf Ihren Link Libraries

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

Update (2016.08.31) in

Dies scheint immer noch ein Problem zu sein. Wenn Sie man clock_gettime Nachschlag, führt dies zu der Lösung (-lrt), aber es sagt auch

Verbindung mit -lrt (nur für glibc-Versionen vor 2.17).

Wenn Ihr Glibc neueren ist, könnte Ihr Problem etwas anderes sein.

+0

Wow. Wie hätte ich das jemals gewusst? Leute, vielen Dank! –

8

Add -lrt zu Ihrem g ++ Aufruf - clock_gettime ist in librt.so.

Verwandte Themen