なぜこのライブラリが見つかりませんか?

なぜこのライブラリが見つかりませんか?

私はこのトピックについてよく知らないので、次のコマンドが機能しない理由はわかりません。

 $ 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

おすすめ記事