将fftw3与TDM-GCC-64中包含的gfortran一起使用
我正在尝试将将fftw3与TDM-GCC-64中包含的gfortran一起使用,fortran,gfortran,fftw,Fortran,Gfortran,Fftw,我正在尝试将FFTW3与Windows 7平台中的TDM-GCC-64套件中包含的gfortran编译器一起使用 我已从以下页面下载了“fftw-3.3.4-dll64.zip”: 我还创建了以下教程中描述的fortran模块: 现在,我试着编译下面的fortrans程序 program test use FFTW3 implicit none integer N parameter(N=4) integer*8 plan double complex in, out di
FFTW3
与Windows 7平台中的TDM-GCC-64
套件中包含的gfortran
编译器一起使用
我已从以下页面下载了“fftw-3.3.4-dll64.zip”:
我还创建了以下教程中描述的fortran模块:
现在,我试着编译下面的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\u平面图\u dft\u 1d\u的引用
对
dfftw\u execute\u的未定义引用
用于编译的命令是:
gfortran test.f90-自由格式-o test_fftw.exe
我上下搜索网页,但没有找到解决问题的方法。有人能帮我吗?谢谢 你需要学习
本教程是指GCC C编译器,dfftw\u plan\u dft\u 1d
在您的代码中,但在fftw3
库中。因此,您必须告诉gfortran
要将该库与您的程序链接,请在编译后执行,否则将找不到该库的定义
这些函数,并且无法生成任何可执行文件。相反,这种联系
由于您看到的未定义引用
错误而失败
用于生成程序的命令:
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.o
与fttw3
库链接,以生成一个可执行文件
程序test\u 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链接器
将库标识符名称
与任何文件名匹配:
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
现在,除非有其他问题,否则程序将链接,并且
如果libfftw3-3.dll
在运行时,可以在其中一个中找到这个答案,对我也很有帮助。但是我有一个问题,通过使用上面的命令(gfortran-o test\u fftw.exe test.o-LC:\fftw-3.3.4-dll64-lfftw3-3),我们是否隐式地为fftw算法启用多线程?