0

我正在尝试编译用 fortran90/95 编写的代码,但出现此错误:

user:~> make
ifort -O3 -lmpi -L/opt/local/intel/fftw/lib -I/opt/local/intel/fftw/include -        I/opt/sgi/mpt/mpt-2.03/include -L/opt/sgi/mpt/mpt-2.03/lib -o /test module_param.o incompact3d.o mesure.o schemas.o derive.o spectral.o tools.o filtre.o parametre.o forcage.o navier.o convdiff.o viv.o slfft3d_shift.o poisson.o
slfft3d_shift.o: In function 'slfft3d_shift_':
slfft3d_shift.f90:(.text+0x587e): undefined reference to 'rfftw3d_f77_mpi_create_plan_'
slfft3d_shift.f90:(.text+0x58a3): undefined reference to 'rfftwnd_f77_mpi_local_sizes_'
slfft3d_shift.f90:(.text+0x58cd): undefined reference to 'rfftwnd_f77_mpi_'
slfft3d_shift.f90:(.text+0x58d9): undefined reference to 'rfftwnd_f77_mpi_destroy_plan_'
slfft3d_shift.f90:(.text+0x91ca): undefined reference to 'rfftw3d_f77_mpi_create_plan_'
slfft3d_shift.f90:(.text+0x91ef): undefined reference to 'rfftwnd_f77_mpi_local_sizes_'
slfft3d_shift.f90:(.text+0x9219): undefined reference to 'rfftwnd_f77_mpi_'
slfft3d_shift.f90:(.text+0x9225): undefined reference to 'rfftwnd_f77_mpi_destroy_plan_'
slfft3d_shift.f90:(.text+0x111e7): undefined reference to 'rfftwnd_f77_one_real_to_complex_'
make: *** [/test] Error 1

这是生成文件:

FC = ifort
OPTFC = -O3 -lmpi -L/opt/local/intel/fftw/lib -I/opt/local/intel/fftw/include -      I/opt/sgi/mpt/mpt-2.03/include -L/opt/sgi/mpt/mpt-2.03/lib/test : module_param.o incompact3d.o mesure.o schemas.o derive.o spectral.o tools.o poisson.o filtre.o parametre.o slfft3d_shift.o forcage.o navier.o convdiff.o viv.o

    $(FC) $(OPTFC) -o /test module_param.o incompact3d.o mesure.o schemas.o derive.o spectral.o tools.o filtre.o parametre.o forcage.o navier.o convdiff.o viv.o slfft3d_shift.o poisson.o

module_param.o : module_param.f90
    $(FC)  $(OPTFC) -c module_param.f90 incompact3d.o : incompact3d.f90
    $(FC)  $(OPTFC) -c incompact3d.f90 mesure.o : mesure.f90
    $(FC)  $(OPTFC) -c mesure.f90 spectral.o : spectral.f90
    $(FC)  $(OPTFC) -c spectral.f90 schemas.o : schemas.f90
    $(FC)  $(OPTFC) -c schemas.f90 derive.o : derive.f90
    $(FC)  $(OPTFC) -c derive.f90 tools.o : tools.f90
    $(FC)  $(OPTFC)  -c tools.f90 forcage.o : forcage.f90
    $(FC)  $(OPTFC) -c forcage.f90 navier.o : navier.f90
    $(FC)  $(OPTFC)  -c navier.f90 filtre.o : filtre.f90
    $(FC)  $(OPTFC) -c filtre.f90 parametre.o : parametre.f90
    $(FC)  $(OPTFC) -c parametre.f90 convdiff.o : convdiff.f90
    $(FC) $(OPTFC) -c convdiff.f90 poisson.o : poisson.f90
    $(FC) $(OPTFC) -c poisson.f90 slfft3d_shift.o : slfft3d_shift.f90
    $(FC) $(OPTFC) -c slfft3d_shift.f90 viv.o  : viv.f90
    $(FC) $(OPTFC) -c viv.f90

当我在 Makefile 中包含所需的库时,我收到以下消息:

user:~/test> make
ifort -O3 -lmpi -I/opt/local/intel/fftw/include -L/opt/local/gnu/fftw -        I/opt/sgi/mpt/mpt-2.03/include -L/opt/sgi/mpt/mpt-2.03/lib -I/opt/fftw/2.1.5.1/cnos/include     -L/opt/intel/composerxe-2011.0.084/mkl/include/fftw/fftw_f77.i -L/opt/fftw/2.1.5.1/cnos/lib     -I/opt/local/intel/fftw -I/opt/fftw/3.1.1/cnos/include -L/opt/fftw/3.1.1/cnos/lib -    I/usr/local/packages/nag/p3dfft-single/2.3/include -L/usr/local/packages/nag/p3dfft-    single/2.3/lib -o /home/u/guitar88/bin/teste module_param.o incompact3d.o mesure.o         schemas.o derive.o spectral.o tools.o filtre.o \
                    parametre.o forcage.o navier.o convdiff.o viv.o slfft3d_shift.o poisson.o -lm -L/opt/local/intel/fftw/lib -lsrfftw_mpi \
                    -lsrfftw -lsfftw_mpi -lsfftw
ld: cannot find -lsrfftw_mpi
make: *** [/test] Error 1

我正在使用 ifort 编译器,并且在使用 MPI 的超级计算机环境中。请问,有什么线索吗?干杯。

4

1 回答 1

0

请注意链接器尝试链接 f77 mpi 库,而您的源后缀,例如“slfft3d_shift.f90”将暗示您调用 f90 例程。


在使用 MPI 的超级计算机环境中

...您通常有一个特定于系统的约定,哪个编译器由哪个包装器调用;请咨询您的系统管理员或系统常见问题解答。

通常 - 尝试编译 MPI 应用程序而不使用“mpif90”、“mpif90.mpich”、“mpif90.openmpi”或类似的 MPI 包装器是非常罕见的。

于 2013-05-20T06:24:34.943 回答