您的位置:首页 > 其它

win7x64、VSx64环境下安装和使用FFTW

2015-12-10 00:28 316 查看
虽然安装方法网上有很多,但说得不够明白,还是让我花费了一点时间才弄好。先将详细过程记录下来。

参考博客文章:

http://blog.sina.com.cn/s/blog_4be364b70101kv0d.html

/article/8329623.html

http://anony3721.blog.163.com/blog/static/511974201312322910595/

运行环境

FFTW的编译方法不说,这里只说使用方法。

运行环境:windows 7 x64, visual studio 2010 x64。

应用于64位程序。

安装

官网上下载适用Windows的已编译好的x64压缩包:

64-bit version: fftw-3.3.4-dll64.zip (2.8MB)

解压缩,如至 D:\fftw 。

系统开始菜单栏中打开Visual Studio x64 Win64 Command Prompt (2010),在命令窗口中使用cd命令切换到fftw的解压缩文件夹(如D:\fftw)下.



在命令窗口下依次输入

lib /machine:x64 /def:libfftw3-3.def

lib /machine:x64 /def:libfftw3l-3.def

lib /machine:x64 /def:libfftw3f-3.def

这样会在fftw的解压缩文件夹下生成对应的.lib文件。适用下面的这段程序测试。

使用

测试程序在最下方,为网上搜来。使用方法为:

1. 用VS建立一个win32控制台程序,将下面代码拷入,注意solution platform 选择x64,也就是下图这个地方:



在project—properties中设置如下:

1)configuration properties—-c/c++—-General—-additional include directories中设置头文件“fftw3.h”所在的路径(如D:\fftw)

2)configuration properties—-linker—-General—-additional library directories中设置库文件”libfftw3-3.lib”、”libfftw3f-3.lib”、”libfftw3l-3.lib”所在的路径(如D:\fftw)

3)configuration properties—-linker—-Input—-additional dependencies中填写”libfftw3-3.lib”、”libfftw3f-3.lib”、”libfftw3l-3.lib”三个库文件名。

运行。成功的结果如下:



注意:如果想像代码里那样,用pragma comment直接标明三个库文件的引用路径,则2步的第3)小步可以省略。

代码:

#include "fftw3.h"
#include <stdio.h>
//#pragma comment(lib, "libfftw3-3.lib")
//#pragma comment(lib, "libfftw3f-3.lib")
//#pragma comment(lib, "libfftw3l-3.lib")
#define N 8
int main()
{
int i;
fftw_complex *din,*out;
fftw_plan p;
din  = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
if((din==NULL)||(out==NULL))
{
printf("Error:insufficient available memory\n");
}
else
{
for(i=0; i<N; i++)/*测试数据*/
{
din[i][0] = i+1;
din[i][1] = 0;
}
}
p = fftw_plan_dft_1d(N, din, out, FFTW_FORWARD,FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed */
fftw_destroy_plan(p);
fftw_cleanup();
for(i=0;i<N;i++)/*OUTPUT*/
{
printf("%f,%fi\n",din[i][0],din[i][1]);
}
printf("\n");
for(i=0;i<N;i++)/*OUTPUT*/
{
printf("%f,%fi\n",out[i][0],out[i][1]);
}

if(din!=NULL) fftw_free(din);
if(out!=NULL) fftw_free(out);
getchar();
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: