2

私はg ++とlapackが初めてで、それらを使用しようとしています。次の素朴なコードをコンパイルしようとしたときに問題が発生しました

#include <lapackpp.h>
int main()
{
    LaGenMatDouble A;
    return 0;
}

コマンドを実行すると

$g++ -L/usr/local/lib -llapackpp test2.cpp 

ここで、test2.cpp が cpp ファイルの名前である場合、端末はエラーを返します。

test2.cpp:1:22: fatal error: lapackpp.h: No such file or directory

しかし、コマンドを実行すると:

$g++ -I/usr/local/include/lapackpp -L/usr/local/lib -llapackpp test2.cpp

端末はエラーを出します:

/tmp/ccUi11DG.o: In function `main':  
test2.cpp:(.text+0x12): undefined reference to `LaGenMatDouble::LaGenMatDouble()'  
test2.cpp:(.text+0x23): undefined reference to `LaGenMatDouble::~LaGenMatDouble()'  
collect2: ld returned 1 exit status

ところで、コマンドを実行すると

$pkg-config lapackpp --libs

結果は

-L/usr/local/lib -llapackpp 

これを解決するのを手伝ってもらえますか? 前もって感謝します!

4

2 に答える 2

1

LapackにはFortranライブラリが必要なので、そこから生まれます-lgfortran。さらに、コンパイラにそのライブラリを提供する正確な方法は、Linuxの配布に依存しているようです。ドキュメントから:

要件

このパッケージには、パッケージ「blas」、「lapack」(「++」なし)、およびFortranコンパイラーが必要です。ほとんどのLinuxでは、これらは「blas」および「lapack」という名前でコンパイル済みのバイナリとして利用できます。SuSE 10.xの場合、Fortranコンパイラはパッケージ「gfortran」として利用できます。SuSE 9.xの場合、Fortranコンパイラはパッケージ「gcc-g77」として入手できます。

なぜpkg-config lapackpp --libsリストされていないのかわからない-lgfortran

-I/usr/local/include/lapackpplapackpp関連のヘッダーファイルを指定します。これがないと、コンパイラはlapackpp.hを含めようとしたときにlapackpp.hを見つけることができません(#include <lapackpp.h>)-質問のコンパイラエラーを参照してください

于 2012-04-06T10:16:11.520 に答える
0

私は最終的に問題を解決しましたが、なぜそうしなければならないのか疑問に思っています。cpp ファイルを lapackpp ライブラリにリンクできる唯一のコマンドは次のとおりです。

g++ foo.cpp -o foo -lgfortran -llapackpp -I/usr/local/include/lapackpp

-lgfortranなしで、または で-I/usr/local/include/lapackpp置き換えても機能しません-L/usr/local/lib

誰か答えがありますか?

于 2012-04-06T03:32:28.360 に答える