私はこのトピックについてあまり知識がないため、次のコマンドが機能しない理由を理解できません。
$ 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
これは、 mumps ライブラリをコンパイルするときに発生します。上記のコマンドは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:ld
の-L
スイッチはディレクトリを取ると思いましたが、なぜここでファイルを直接参照するのですか? -L引数からlibrefblas.aを削除すると、「未定義の参照」エラーが多数発生します。
質問2:-l
は、正しく思い出せば、.a
を探してから、.so
を探すことを意味するはずです。 .so
ファイルがないのは問題ですか? gfortran -v ...
を使用して調べようとしましたが、デバッグに役立ちませんでした。
私はコメント、特に@Matの功績の助けを借りてこれを解決することができました。
Openmpiバージョンをコンパイルしたかったので、私のシステムではgfortran
の代わりにmpif90
を使用するのに役立ちました。
$ mpif90 --showme
/usr/bin/gfortran -I/usr/include -pthread -I/usr/lib/openmpi -L/usr/lib/openmpi -lmpi_f90 -lmpi_f77 -lmpi -ldl -lhwloc