0

ライブラリAGMGをコンパイルしようとしています。

並列の例のmakeファイルは次のようになります。

# MPIopt    = -I/... (where to find mpif.h)
# MUMPSPopt = -I/... (where to find files to be included by 
#                     applications using MUMPS)
# MUMPSlib  = -l...  (link reference for MUMPS)
# SCALAP    = -l...  (link reference for SCALAPACK, needed by MUMPS)
# BLASLAPACK= -l...  (link reference for LAPACK & BLAS)
# MPIlib    = -l...  (link reference for MPI)

私のDebianでmpif.hが見つかりました:

$ ls /usr/lib/openmpi/include/mpi.h 
/usr/lib/openmpi/include/mpi.h

だから私はMakefileに書いた:

MPIopt  =   -I/usr/lib/openmpi/include/
MPIlib    = -lmpi

しかし、それでもなお、コンパイルしようとすると、次のエラーが発生します。

:~/AGMG_3.0/Example_par$ make
cd ../SRC;make dpar
make[1]: Entering directory `AGMG_3.0/SRC'
make[1]: Nothing to be done for `dpar'.
make[1]: Leaving directory `AGMG_3.0/SRC'
gfortran-4.4 -O4 -o Example_par Example_par.o ../SRC/dagmg_par.o   -lmpi 
Example_par.o: In function `MAIN__':
Example_par.f90:(.text+0x77): undefined reference to `mpi_init_'
....
....
....
dagmg_par.f90:(.text+0x19fc9): undefined reference to `mpi_comm_rank_'
dagmg_par.f90:(.text+0x19fdd): undefined reference to `mpi_comm_size_'
collect2: ld returned 1 exit status
make: *** [Example_par] Error 1

私は今ではかなり混乱しています。私は成功した試みをしましたが、scaplapやその他の要件に問題がありました。scalapが見つかりました:

$ dpkg -L libscalapack-mpi-dev 
/.
/usr
/usr/lib
/usr/lib/libscalapack-openmpi.a

おたふく風邪は/usr/lib/libsmumps.aにあり、ヘッダーファイルは/usr/include/smumps_c.hにあります。

では、どうすればこれをすべてまとめることができますか?

より高度なFortranまたはC開発者にとって、これは些細なことであることを私は知っています...

よろしくお願いします。

編集:私はここに完全なMakefile定義を入れています、それが他の人を助けるかもしれないことを願っています:

MPIopt = -I/usr/lib/openmpi/include -I/usr/lib/openmpi/lib -L/usr/lib/openmpi/lib -pthread 
MPIlib = -lmpi_f90 -lmpi_f77 -lmpi 
MUMPSPopt = -I/usr/lib/libsmumps.a -I/usr/lib/libdmumps.a
MUMPSlib = -lsmumps  -ldmumps
BLASLAPACK=-L/usr/lib -llapack -lblas 
BLASLAPACK=-L/usr/lib -llapack -lblas 
SCALAP = -L/usr/lib/libscalapack-openmpi.a -lscalapack-openmpi

F90=gfortran-4.6    

これはそれを構築します。返信ありがとうございます!

4

2 に答える 2

4

私はあなたがFortranMPIライブラリのものを見逃していると思います。インストールのmpiコンパイララッパーを使用する必要があります。通常はmpif90と呼ばれます。すべてのライブラリを手動で指定する場合は、ラッパーによって設定されたオプションを一目で確認できます。

mpif90 --showme

(openmpiの場合)またはMPIライブラリに応じて、同様のフラグ。

于 2012-03-05T21:48:07.357 に答える
3

これらはリンカーエラーです。インクルードファイルは正常に取得されたようですが、リンカはMPIライブラリを認識していません。次のようなMPIlib = -lmpiへのパスを含むものに変更してみてくださいlibmpi.aMPIlib = -L/usr/lib/openmpi/lib -lmpi

または、@ haraldklが提案するように、MPIコンパイララッパーを使用してみてください。これらは、MPIへのリンクを自動的に処理する必要があります。

于 2012-03-05T22:09:24.823 に答える