0

Fortran 90 と Fortran 77 を組み合わせて作成したプロジェクトに取り組んでおり、netlib.org の LAPACK/BLAS ライブラリをすべて Linux 環境でプロジェクトにリンクする必要があります。指定された で gfortran コンパイラ フラグを使用し、OPTS = -O2 -fPIC -m64それMakefileを使用して作成しました。

make blaslib
make

そして、それは正常に終了しました、または少なくともそう思います。

次に、ファイルを/usr/local/liband /usr/local/bin/andにコピーしました/usr/local/lib64/ が、機能しませんでした。私もオプション-L/path/to/lapack/liblapack.aを使用しましたが、それも機能しませんでした。

コードをコンパイルすると、次のエラーが発生します。

qrB.o: In function `qrfactorizeb_':
qrB.f90:(.text+0x64f): undefined reference to `zgeqp3_'
collect2: ld returned 1 exit status
make: *** [run] Error 1

このエラーをどうするか本当にわかりません。他の 3 台のワークステーションでテストしましたが、役に立ちませんでした。誰でも私を助けることができますか?

4

1 に答える 1

1

私は少し前に同じ問題を抱えていました!Windows と Linux でのデュアル作業と、Windows のオプションを簡単に操作できることは、私に興味深いことを教えてくれました。

次のようにコンパイルしてみてください: [...]$ ifort liblapack.a libblas.a libslatec.a *.o -o profmm

ご存知のように、3 つのライブラリを使用してファイルをコンパイルし、profmm 出力ファイルにリンクしたいということです。構文エラーはありませんが、 preconditioner3.o: In function factorb_': preconditioner3.f:(.text+0x1add): undefined reference tozgetrf_' のような多くのエラーが発生します。. preconditioner.o: 関数factorpre_': preconditioner.f:(.text+0x13a2): undefined reference tozgetrf_' preconditioner.f:(.text+0x18bb): zgetri_' zbesh.o: In functionzbesh_' への未定義参照: zbesh.f:(.text+0xb3): d1mach_' zbesh.f:(.text+0xcf): undefined reference toi1mach_' への未定義参照。. . ライブラリが現在のディレクトリにあるにもかかわらず、ifort がライブラリを読み取れないことを示すさらに多くのエラーが発生しました。

ただし、コマンドを次のように変更するだけです: [...]$ ifort *.o liblapack.a libblas.a libslatec.a -o profmm

エラーなしで正常に動作します!これは、ifort が私のライブラリ (ローカルのもの) を読み取れるようになったことを意味します。また、ライブラリの順序を変更することは非常に重要であり、プログラム内でこれらのサブルーチンを使用する順序に依存することに注意してください。そのため、常にライブラリ チェーンの順序を変更して、エラーの可能性をチェックしてください。

それが役に立てば幸い。

于 2013-07-26T20:13:58.107 に答える