我整理了FFTW在windows和linux下安装的过程,我自己也在这两个系统中安装成功了,还是遇到不少问题的,我接下来把网上搜到的资料和自己遇到的问题一一告诉大家,让大家少走弯路。


windows 下安装:

转载于:http://www.cnblogs.com/zyx2007/archive/2012/02/28/2371780.html

参考这篇文章,然后在我的VS 2012上面安装成功了。。

  FFTW是用来计算一维或者多维的离散傅里叶变换,输入可以为实数序列也可以为复数序列的C语言的子函数库,FFTW是免费软件,是作为fft函数库的各种应用的上佳选择。



1. 从网站http://www.fftw.org上下载最新的预编译文件:
    32-bit version: fftw-3.2.2.pl1-dll32.zip (1.8MB)
    64-bit version: fftw-3.2.2-dll64.zip (2.2MB)
2.安装lib.exe
   其实这是VC自带的工具,在VC6.0和VS05中都有的,我机器上安装了VS2012,  则lib.exe的路径如下:
   D:\soft setup\Visual studio 2012\VC\bin   (VS2012的目录)
   (不需要使用CMD 直接用鼠标点击)进入目录D:\soft setup\Visual studio 2012\VC\bin
    把D:\soft setup\Visual studio 2012\Common7\IDE 里面的mspdb80.dll,mspdbcore.dll,mspdbsrv.exe,msobj80.dll 复制到上面的D:\soft setup\Visual studio 2012\VC\bin文件夹里,把你下载的fftw中的文件libfftw3-3.def,libfftw3f-3.def,libfftw3l-3.def也拷到bin下面。

  然后输入lib.exe(即运行),会有如下提示:

  

  这时候你的lib命令就可以使用了。

 

3.在cmd进入上面提到的bin目录,并运行
  lib /machine:i386 /def:libfftw3-3.def
  lib /machine:i386 /def:libfftw3f-3.def
  lib /machine:i386 /def:libfftw3l-3.def

 

4.将libfftw3f-3.dll libfftw3-3.dll libfftw3l-3.dll放入windows/system32中,然后将生成的库文件libfftw3-3.lib libfftw3f-3.lib libfftw3l-3.lib放入vc中的lib文件夹,把fftw3.h放入include文件夹。

 

5.在你新建工程的时候,记得#include”fftw3.h“,然后设置参数:”项目“==>"项目属性"==>"配置属性"==>"链接器"==>"输入"==>"附加依赖项",将以下三项添加进去:

   libfftw3-3.lib

   libfftw3f-3.lib

   libfftw3l-3.lib

6.完成。

7. 如果出现找不到那些dll,计算机无法运行的话,就有可能是你的系统是64位,你只要把上面四个dll文件再复制一份放到SysWoW64文件夹里面就好了。

8.如果不想VS2012那些讨厌的预编译头文件的话,直接在项目属性/ 的c/c++中预编译头中的第一个选择:预编译头,选择不使用编译头就OK了。

9.那些讨厌 stdafx.h等都可以删掉了。

10. 如果遇到第三步骤通不过,不能找到lib文件的错误,则可以试图找其它方式编译出来三个lib文件,然后继续步骤三以下的步骤,同样可以实现安装,有时候,换个笔记本电脑就可以得到lib。比如我的笔记本就可以编译出来,而师兄的就不行。

11.下面是从别的博客上找到的一个测试代码:

#include "fftw3.h"

int main()

{
    fftw_complex *in, *out;
    fftw_plan p;
    int N= 8;
    int i;
    int j;
    in = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
    out = (fftw_complex*) fftw_malloc(sizeof(fftw_complex) * N);
    for( i=0; i < N; i++)
    {
        in[i][0] = 1.0;
        in[i][1] = 0.0;
        printf("%6.2f ",in[i][0]);
    }
    printf("\n");
    p=fftw_plan_dft_1d(N,in,out, FFTW_FORWARD, FFTW_ESTIMATE);
    fftw_execute(p); /* repeat as needed*/
    for(j = 0;j < N;j++)
    {
        printf("%6.2f ",out[j][0]);
    }
    printf("\n");
    fftw_destroy_plan(p);
    fftw_free(in); 
    fftw_free(out);
    return 0;
}

结果如下:


linux下安装:

文章来自于:http://blog.csdn.net/wbgxx333/article/details/36625977

但是在安装中遇到了几个问题

1. 要在root权限下安装,不然/usr/bin下安装不通过

2.安装后搜不到fftw3.h头文件,其实安装在这个路径下面

/usr/local/fftw

所以你的编译命令这样写就可以通过:


或者makefile 写成这样:

INCLUDESLIB = -lfftw3

INCLUDESH = -I/usr/local/fftw/include

LIBS = -L/usr/local/fftw/lib


main: test_fftw.o

g++ -o test_fftw test_fftw.cpp $(INCLUDESH) $(INCLUDESLIB) $(LIBS)
test_fftw.o:
g++ -c test_fftw.cpp $(INCLUDESH)
clean:
rm -f *.o
.PHONY:clean

也是可以成功的。

最后附上文章:

FFTW(the Fastest Fourier Transform in the West)库是由MIT(Massachusetts Institute of Technology)的Matteo Frigo和Steven G. Johnson开发的,用于一维和多维实数或复数的离散傅里叶变换。
1. 下载 fftw-2_1_3_tar.gz              (www.fftw.org, or www.rpmfind.net )
2. tar zxvf fftw-2_1_3_tar.gz            展开压缩文件
3. 在Linux中安装FFTW:
a.    ./configure --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks   

其中,--enable-type-prefix    参数是为了同时使用single precision(单精度)和double precision(双精度),如果不使用它,最后只有以rfftw开头的文件被安装(real fftw);

--prefix=                      参数是设定安装目录;

--with-gcc                    使用gcc编译器;

--disable-fortran         参数为了不包含Fortran调用的机制;

--enable-i386-hacks   为Pentium和x86以后的CPU优化gcc的编译速度。
b.make                          编译

c.make install               安装,这一次安装完后,在安装目录中存在以dfftw和drfftw开头文件,但没有sfftw开头的文件

d.make clean              还需要安装一次,先清除

e../configure --enable-float --enable-type-prefix --prefix=/usr/local/fftw --with-gcc --disable-fortran --enable-i386-hacks

其中,--enable-float      为了生成单精度计算的头文件和库文件,即以sfftw开头的文件。
f.make                      重新编译

g.make install            再一次安装,安装完后,目录中便会同时存在sfftw和dfftw开头的文件(用于复数函数/complex function的FFT变换)和srfftw与drfftw开头的文件(用于实数函数的FFT变换)


例如,如果需要用到双精度的实数FFT变换/FFTs,那么在编译的链接命令中需要按如下顺序加入
-ldrfftw -ldfftw参数


下面的是如何使用的一个例子

#include <complex>
#include <fftw3.h>
#include <math.h>
#include <iostream>
 
#define N 10
using namespace std;
int main(int argc, char * argv[]){
 
    fftw_complex in[N], out[N];
    fftw_plan p;
    p=fftw_plan_dft_1d(N,in,out,FFTW_FORWARD,FFTW_MEASURE);
    for(int i=0;i <N;i ++) {
        in[i][0]=i;
        in[i][1]=0.0;
    }
   
 
    fftw_execute(p);
 
    for(int i=0;i <N;i ++){
        cout<<out[i][0]<<" "<<out[i][1]<<endl;
    }
    complex<double> temp = 0.0;
    for(int k =0; k < N; k ++){
        double pi = 4*atan(1.0);
        temp += exp(complex<double>(0.0,-2.0*pi*3*k/N))*complex<double>(in[k][0],in[k][1]);
    }
    cout<<"out[3] is "<<temp<<endl;
 
    fftw_complex out1[N];
 
    fftw_plan p1;
 
    p1=fftw_plan_dft_1d(N,out1,in,FFTW_BACKWARD,FFTW_MEASURE);
 
    for(int i=0;i <N;i ++){
        out1[i][0]=out[i][0];
        out1[i][1]=out[i][1];
    }
 
    fftw_execute(p1);
    for(int i=0;i <N;i ++){
        cout<<in[i][0]<<" "<<in[i][1]<<endl;
    }
 
 
 
    fftw_destroy_plan(p);
    fftw_destroy_plan(p1);
    return 1;
}
结果是:

GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐