14

私はこれとまったく同じ問題を扱っている他のいくつかの投稿を見てきました。しかし、それらの解決策はどれも私にはうまくいかないようです。私は次のコードをコンパイルしています:

#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 / lib / gcc / i686-redhat-linux / 4.7.0 / .. / .. / .. / libboost_timer.so: `boost :: chrono ::steady_clock :: now()'への未定義の参照
collect2:エラー: ldが1つの終了ステータスを返しました

コンパイル時に-lboost_chronoを追加すると、次のエラーが発生します。

/usr/lib/gcc/i686-redhat-linux/4.7.0/../../../libboost_chrono.so: `clock_gettime'への未定義の参照
collect2:エラー:ldが1つの終了ステータスを返しました

clock_gettimeをsys/time.hまでトレースできます。残念ながら、リンク先の対応する.soファイルが見つかりません。ここで何が欠けていますか?

4

2 に答える 2

22

-lrtリンクライブラリに追加する必要があります

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

更新(2016-08-31)

これはまだ問題のようです。ルックアップすると、これは解決策( )にman clock_gettimeつながりますが、-lrt

-lrtとリンクします(2.17より前のglibcバージョンのみ)。

したがって、glibcが新しい場合、問題は別のものである可能性があります。

于 2012-11-30T21:26:39.337 に答える
9

-lrtg ++呼び出しに追加–clock_gettimeはにありlibrt.soます。

于 2012-11-30T21:26:14.020 に答える