2012-03-05 4 views
0

ライブラリAGMGをコンパイルしようとしています。mpi(AGMG)を使用するライブラリをコンパイルします

並列例えばメイクファイルはこのように見ている:私のDebian mpif.hで

# 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) 

が発見された:

$ 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開発者のために、これは些細なことだろうと知っています。

EDIT: 私はそれが他の人を助けるかもしれない期待して、ここでは完全な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  

。返信ありがとう!

答えて

3

これはリンカエラーです。インクルードファイルが正常に選択されたようですが、リンカーはMPIライブラリを見ていません。 @haraldklにより示唆されるように、MPIコンパイララッパーを使用してみてください、また

MPIlib = -L/usr/lib/openmpi/lib -lmpiようなlibmpi.aへのパスが含まれて何かにMPIlib = -lmpiを変更してみてください。これらは自動的にMPIにリンクする必要があります。

+0

ありがとう!これは私にそれをする方法を示しました! -L/Path/to/Library.a -llibName! – Oz123

4

あなたはfortran MPIライブラリのものがないと思います。インストールのmpiコンパイララッパーを使用する必要があります。通常、mpif90と呼ばれます。あなたが手ですべてのライブラリを指定したい場合は、あなたのMPIライブラリに依存し、

mpif90 --showme 

(OpenMPIの場合)またはいくつかの同様のフラグでラッパーによって設定されたオプションで一目を持つことができます。

+0

答えに感謝します。これは私にMPIに関するものを示してくれましたが、私はまだ他のライブラリとは苦労しました。他の答えは、他の人のためにそれをする方法を私に示したので、私はそれを受け入れた。 – Oz123

関連する問題