缺少FFTW库

时间:2013-05-17 22:33:41

标签: fortran mpi fftw intel-fortran

我正在尝试编译用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

这是Makefile:

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的超级计算机环境中。请问,发生了什么事情的任何线索?欢呼声。

1 个答案:

答案 0 :(得分:0)

请参加链接器尝试链接f77 mpi libs,而你的源代码后缀,例如那个“slfft3d_shift.f90”意味着你打电话给f90例程。


  

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

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

通常情况下 - 尝试编译MPI应用程序而不使用“mpif90”,“mpif90.mpich”,“mpif90.openmpi”等类似的MPI包装是非常罕见的。