2015-10-05 152 views
0

我试图在Windows 7平台中使用包含在TDM-GCC-64套件中的FFTW3gfortran编译器。使用包含在TDM-GCC-64中的gfortran fftw3

我已下载 “fftw-3.3.4-dll64.zip” 从以下页面:

http://www.fftw.org/install/windows.html

我也创造了下面的教程描述的FORTRAN模块:

http://www.fftw.org/doc/Defining-an-FFTW-module.html

现在我试着编译下面的fortrans程序

program test 

use FFTW3 

implicit none 

integer N 
parameter(N=4) 

integer*8 plan 
    double complex in, out 
    dimension in(N),out(N) 

    integer i 

    write(*,*) 'Input array:' 

    do i = 1,N,1 
    in(i) = dcmplx(float(i),float(i+1)) 
    write(*,*) ' in(',i,') = ',in(i) 
    enddo 

    call dfftw_plan_dft_1d (plan, N, in, out, FFTW_FORWARD, FFTW_ESTIMATE) 

    call dfftw_execute (plan) 

    write(*,*) 'Output array:' 
    do i = 1,N,1 
    write(*,*) ' out(',i,') = ',out(i) 
    enddo 

    call dfftw_destroy_plan (plan) 

    call dfftw_plan_dft_1d (plan, N, out, in, FFTW_FORWARD, FFTW_ESTIMATE) 

    call dfftw_execute (plan) 

    write(*,*) 'Output array after inverse FFT:' 
    do i = 1,N,1 
    write(*,*) ' ',N,' * in(',i,') = ',in(i) 
    enddo 

    call dfftw_destroy_plan (plan) 

    end 

我试图编译,但一对夫妇的错误消息弹出:

未定义参考dfftw_plan_dft_1d_' undefined reference to dfftw_execute_” ...

用于编译的命令是:

gfortran test.f90 -ffree-form -o test_fftw.exe

我上下搜索了网页,但没有找到解决问题的方法。任何人都可以帮我在这里吗?谢谢!!!

回答

0

你需要学习the basics of compiling and linking programs with GCC 本教程是指GCC C编译器,gcc,和C++编译器,g++,但原则是Fortran编译器,gfortran相同。

程序调用的函数,如dfftw_plan_dft_1d,在代码中未定义为 ,但在fftw3库中。因此,你必须告诉gfortran链接该库与您的程序,它被编译后,或没有定义将为 这些功能被发现,并没有可执行的可建。相反,链接 失败,出现undefined reference错误。

已用于构建程序的命令:

gfortran test.f90 -ffree-form -o test_fftw.exe 

尝试编译和一个命令链接程序。如果您清楚地了解编译 和链接的基本单独过程,则可以执行此操作, 。如果你不这样做,你应该按照更好的做法编译第一个, ,如果这是成功的,然后链接。您使用的命令在连接步骤中失败,因为它不告诉链接器需要fftw3库 (或在哪里找到它),因此不会尝试找到它并将其链接。

你说你已经下载了fftw-3.3.4-dll64.zip。我推测你已经将 解压缩到你系统的某个地方。假设您将其解压缩到C:\fftw-3.3.4-dll64

你也说你已经做了一个FFTW3模块,显然是成功的使用。 在这种情况下,第一编译程序:

gfortran -c -o test.o test.f90 

生成对象文件test.o。选项-c告诉gfortran仅编译, 而不链接。 (您不需要指定--ffree-form:文件扩展名.f90 意味着它)。

接下来,链接目标文件test.ofttw3库,使一个可执行 程序test_fftw.exe

gfortran -o test_fftw.exe test.o -LC:\fftw-3.3.4-dll64 -lfftw3-3 

链接器选项:

-LC:\fftw-3.3.4-dll64 

告知链接添加C:\fftw-3.3.4-dll64(其中您将该包解压缩到 到它将搜索以查找库的目录列表中。链接器选项-lfftw3-3告诉它链接与标识符fftw3-3匹配的库。在Windows中,GCC连接 将匹配库identfier name与任何文件名:

libname.a (a static library) 
libname.dll (a shared library) 
name.dll (also a shared library) 
name.lib (an import library for a shared library) 

那么,既然C:\fftw-3.3.4-dll64包含共享库libfftw3-3.dll, 链接器将在该目录中标识为所要求的一个-lfftw3-3

现在,除非有其他问题,您计划将链接,你将有 可执行test_fftw.exe,这将运行,前提是libfftw3-3.dll 可以发现,在运行时,在一个

+0

哇,它符合你的指示很好。万分感谢!!! –