将 fftw3 与包含在 TDM-GCC-64 中的 gfortran 一起使用
use fftw3 with gfortran included in TDM-GCC-64
我正在尝试将 FFTW3
与 gfortran
编译器一起使用,该编译器包含在 Windows 7 平台的 TDM-GCC-64
套件中。
我已从以下页面下载 "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
我在网上上下搜索但没有找到问题的解决方案。有人可以帮我吗?谢谢!!!
你需要学习the basics of compiling and linking programs with GCC
本教程参考了 GCC C 编译器 gcc
和 C++ 编译器 g++
,但 Fortran 编译器的原理相同 gfortran
.
您的程序调用了未定义的函数,例如 dfftw_plan_dft_1d
在您的代码中,但在 fftw3
库中。因此你必须告诉 gfortran
link 那个库和你的程序,编译后,否则找不到定义
这些功能,并且无法构建可执行文件。相反,link年龄
失败并出现您看到的 undefined reference
个错误。
您用于构建程序的命令:
gfortran test.f90 -ffree-form -o test_fftw.exe
尝试在单个命令中编译和link程序。你可以这样做,
如果您清楚地了解底层的单独编译过程
和 linking。如果你不这样做,你应该遵循先编译的更好做法,
如果成功,则 linking。您使用的命令失败于
它的 linkage 步骤因为它没有告诉 linker fftw3
库
需要(或在哪里可以找到它)所以没有尝试找到它并且 link 它。
你说你已经下载了fftw-3.3.4-dll64.zip
。我想你有
将其解压缩到您系统的某个位置。假设您将其解压缩到 C:\fftw-3.3.4-dll64
.
您还说您制作了一个显然正在成功使用的 FFTW3 模块。
在这种情况下,首先编译你的程序:
gfortran -c -o test.o test.f90
正在生成目标文件 test.o
。选项 -c
告诉 gfortran
只编译,
而不是 link。 (您不需要指定 --ffree-form
:文件扩展名 .f90
暗示它)。
下一步,link目标文件test.o
和fttw3
库,生成可执行文件
程序 test_fftw.exe
:
gfortran -o test_fftw.exe test.o -LC:\fftw-3.3.4-dll64 -lfftw3-3
linker 选项:
-LC:\fftw-3.3.4-dll64
告诉 linker 添加 C:\fftw-3.3.4-dll64
(你解压缩包的地方)
到它将搜索以查找库的目录列表。 linker 选项 -lfftw3-3
告诉它 link 一个与标识符 fftw3-3
匹配的库。在 Windows 上,GCC linker
将匹配库标识符 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
,
linker 将在该目录中将其识别为 -lfftw3-3
所需的目录
现在,除非有其他问题,你的程序将 link 并且你将拥有
一个可执行文件 test_fftw.exe
,它将 运行,前提是 libfftw3-3.dll
可以在运行时间在Windows的地方之一找到
加载程序会寻找它。
我正在尝试将 FFTW3
与 gfortran
编译器一起使用,该编译器包含在 Windows 7 平台的 TDM-GCC-64
套件中。
我已从以下页面下载 "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
我在网上上下搜索但没有找到问题的解决方案。有人可以帮我吗?谢谢!!!
你需要学习the basics of compiling and linking programs with GCC
本教程参考了 GCC C 编译器 gcc
和 C++ 编译器 g++
,但 Fortran 编译器的原理相同 gfortran
.
您的程序调用了未定义的函数,例如 dfftw_plan_dft_1d
在您的代码中,但在 fftw3
库中。因此你必须告诉 gfortran
link 那个库和你的程序,编译后,否则找不到定义
这些功能,并且无法构建可执行文件。相反,link年龄
失败并出现您看到的 undefined reference
个错误。
您用于构建程序的命令:
gfortran test.f90 -ffree-form -o test_fftw.exe
尝试在单个命令中编译和link程序。你可以这样做,
如果您清楚地了解底层的单独编译过程
和 linking。如果你不这样做,你应该遵循先编译的更好做法,
如果成功,则 linking。您使用的命令失败于
它的 linkage 步骤因为它没有告诉 linker fftw3
库
需要(或在哪里可以找到它)所以没有尝试找到它并且 link 它。
你说你已经下载了fftw-3.3.4-dll64.zip
。我想你有
将其解压缩到您系统的某个位置。假设您将其解压缩到 C:\fftw-3.3.4-dll64
.
您还说您制作了一个显然正在成功使用的 FFTW3 模块。 在这种情况下,首先编译你的程序:
gfortran -c -o test.o test.f90
正在生成目标文件 test.o
。选项 -c
告诉 gfortran
只编译,
而不是 link。 (您不需要指定 --ffree-form
:文件扩展名 .f90
暗示它)。
下一步,link目标文件test.o
和fttw3
库,生成可执行文件
程序 test_fftw.exe
:
gfortran -o test_fftw.exe test.o -LC:\fftw-3.3.4-dll64 -lfftw3-3
linker 选项:
-LC:\fftw-3.3.4-dll64
告诉 linker 添加 C:\fftw-3.3.4-dll64
(你解压缩包的地方)
到它将搜索以查找库的目录列表。 linker 选项 -lfftw3-3
告诉它 link 一个与标识符 fftw3-3
匹配的库。在 Windows 上,GCC linker
将匹配库标识符 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
,
linker 将在该目录中将其识别为 -lfftw3-3
现在,除非有其他问题,你的程序将 link 并且你将拥有
一个可执行文件 test_fftw.exe
,它将 运行,前提是 libfftw3-3.dll
可以在运行时间在Windows的地方之一找到
加载程序会寻找它。