4

行列演算のベクトル化を約束する Eigen ライブラリを利用しています。Eigen で提供されているファイルの使用方法と makefile の書き方がわかりません。Eigen を使用するソース ファイルには、以下にリストされているファイルが含まれています。これらはヘッダー ファイルではありません (単なるテキスト ファイルです)。

<Eigen/Core>
<Eigen/Dense>
<Eigen/Eigen>

等々。Eigen の Web ページには、その機能を使用するためにプロジェクトをビルドする必要がないことが記載されています。これらのファイルを makefile に含めてプロジェクトをビルドするにはどうすればよいでしょうか。私の例の main.c ファイルは次のようになります。このファイルのmakefile makefileの書き方を教えてもらえますか-

#include <Eigen/Core>

// import most common Eigen types 
USING_PART_OF_NAMESPACE_EIGEN

int main(int, char *[])
{
  Matrix3f m3;
  m3 << 1, 2, 3, 4, 5, 6, 7, 8, 9;
  Matrix4f m4 = Matrix4f::Identity();
  Vector4i v4(1, 2, 3, 4);

  std::cout << "m3\n" << m3 << "\nm4:\n"
    << m4 << "\nv4:\n" << v4 << std::endl;
}

ヘルプ!

4

4 に答える 4

7

Eigen の Web サイトによると、これはヘッダーのみのライブラリです。

これは、コンパイルまたはリンクするものが何もないことを意味します。代わりに、ヘッダー ファイルが標準の場所 ( /usr/local/include*nix/Mac 上) にある限り、その場所をプリプロセッサのビルド ステップに追加するだけで済みます。

*nix/Mac を実行していて、すべてがデフォルトの場所にインストールされていると仮定すると (たとえば#include <Eigen/Core>、ファイルを参照します/usr/local/include/Eigen/Core)、SUPER シンプルな makefile は次のようになります。

main: main.cpp
    g++ -I /usr/local/include main.cpp -o main

つまり、英語では次のようになります。

  • main依存するmain.cpp
  • 作る、 main使うg++
    • コンパイルmain.cpp
    • 出力ファイルmain,
    • ディレクトリ/usr/local/includeを調べて、不明なヘッダーを探します

注: g++4 つのスペースではなく、行の前に TAB があります。

それが役立つことを願っています。

于 2010-07-19T12:04:07.540 に答える
2

彼らは彼らのドキュメンテーションにこれを持っています。

g++ -I /path/to/eigen2/ my_program.cpp -o my_program 

There is no library to link to. 

テンプレート(ヘッダー)ファイルのパスをMakefile内のインクルードディレクトリに追加する必要があるようです。

于 2010-07-19T12:00:09.057 に答える
1

これらは実際にはヘッダーファイルです。Eigen はテンプレート ライブラリであり、定義と宣言を別々のファイルに保持するという非テンプレートの慣行とは対照的に、次の一般的なテンプレートの慣行には、定義と宣言をすべてヘッダー ファイルに含めます。減速と定義を別々に保持する場合、定義を含むソース ファイルをライブラリ オブジェクト ファイルにビルドして、プログラムにリンクする必要があります。

これは、最初に Eigen ヘッダー ファイルをインクルードするだけで、表向きはすでに行われています。

システムのインクルード パスに Eigen ヘッダー ファイルをインストールしている限り、ユーザー側でカスタマイズしなくてもプログラムにコンパイルされます。それらをインクルード パスにインストールしていない場合は、単に g++ へのフル パスを次のように指定します...

g++ -I /path/to/eigen2/ source_file -o output_file
于 2010-07-19T12:12:18.707 に答える
0

fortranライブラリが必要な場合は、次のコマンドを使用します

g ++ source.cpp -o output -I /../ include -L /../ lib -L ​​/../ lib64 -lcholmod -lmetis -lamd -lcamd -lccolamd -lcolamd -llapack -lgfortran -lblas

実際のパスを..に置き換えます。

于 2011-06-18T21:23:30.967 に答える