私はこのトピックについてよく知らないので、次のコマンドが機能しない理由はわかりません。
$ gfortran -o dsimpletest -O dsimpletest.o ../lib/libdmumps.a \
../lib/libmumps_common.a -L/usr -lparmetis -lmetis -L../PORD/lib/ \
-lpord -L/home/eiser/src/scotch_5.1.12_esmumps/lib -lptesmumps -lptscotch \
-lptscotcherr /opt/scalapack/lib/libscalapack.a -L/usr/lib/openmpi/ \
-lmpi -L/opt/scalapack/lib/librefblas.a -lrefblas -lpthread
/usr/bin/ld: cannot find -lrefblas
collect2: ld returned 1 exit status
コンパイル時にこれが起こります流行性耳下腺炎図書館。上記のコマンドはmakeを介して実行されます。 librefblas.aを正しいパスに入れました。
$ ls /opt/scalapack/lib/ -l
total 20728
-rw-r--r-- 1 root root 619584 May 3 14:56 librefblas.a
-rw-r--r-- 1 root root 9828686 May 3 14:59 libreflapack.a
-rw-r--r-- 1 root root 10113810 May 3 15:06 libscalapack.a
-rw-r--r-- 1 root root 653924 May 3 14:59 libtmg.a
質問1:-L
ディレクトリスイッチだと思いましたが、ld
なぜここでファイルが直接参照されますか? -Lパラメーターからlibrefblas.aを削除すると、「未定義参照」エラーが発生します。
質問2: -l
私の記憶が正しいなら、それは追求し、.a
また追求するという意味でしょう。.so
私はこのファイルを持っていませんでしたか.so
?を使用して調べようとしましたが、gfortran -v ...
デバッグには役立ちませんでした。
答え1
@Matさんのおかげで、コメントの助けを借りてこの問題を解決することができました。
openmpiのバージョンをコンパイルしたいので、mpif90
代わりに使用するのが役立ちますgfortran
。私のシステムでは、次のようになります。
$ mpif90 --showme
/usr/bin/gfortran -I/usr/include -pthread -I/usr/lib/openmpi -L/usr/lib/openmpi -lmpi_f90 -lmpi_f77 -lmpi -ldl -lhwloc