利用MinGW64编译多线程版FFTW

一.按照下述网站所述方式安装MinGW64:(首先安装MinGW Installation Manager)
http://www.kineticsystem.org/?q=node/19

http://ingar.satgnu.net/devenv/mingw32/base.html

1.在点击打开链接下载MinGW,运行点击安装。

下一步设置安装路径,点击continue,安装完成后点击continue,完成MinGW Installation Manager安装。

下一步安装MSYS package:

点击MinGW Installation Manager,可以选择默认的安装,不过本次只需要MinGW64,所以只需装msys-base,将前面的方框标记,打开Installation菜单点击Apply Changes,点击Apply按钮,安装完成后点击close,接下来安装一些额外的包:选择All Packages菜单,标记下列包:

  • msys-rxvt
  • msys-unzip
  • msys-wget
  • msys-zip

然后安装(同前面)。

打开安装目录,找到msys\1.0\msys.bat,创建桌面快捷方式,点击快捷方式右键属性,将

  • Target: C:\MinGW\msys\1.0\msys.bat --rxvt(将C:\MinGW换成安装目录
  • Start in: C:\MinGW\msys\1.0\bin(将C:\MinGW换成安装目录

点击ok。

2.安装MinGW-w64

点击打开链接下载x86_64-4.9.2-release-posix-seh-rt_v3-rev0.7z安装包,解压到前述的安装目录中。


3.配置msys和MinGW-w64:

在msys\1.0\etc中找到profile文件并打开,将其中的PATH加入(前述安装目+mingw64/bin(前述解压后的bin文件夹))保存,退出msys,重新打开msys,输入g++ -v,可以查看g++版本和MinGW版本,当host,build,target都指向mingw64(本人机器中--host=x86_64-w64-mingw32 --build=x86_64-w64-mingw32 --target=x86_64-w64-mingw32)表明可以使用mingw 64位的编译器了。


二.编译FFTW。

1.点击打开链接下载FFTW源码(http://www.fftw.org/download.html),解压。

2.打开msys进入FFTW解压后的文件夹中(使用linux命令),输入命令./configure -h查看其中编译配置的选项,选择需要配置的命令(例如编译支持多线程double型的 我输入的是./configure --prefix=/mingw64/local64/fftwout5/ --disable-alloca --enable-float --with-our-malloc16 --with-windows-f77-mangling --enable-shared --disable-static --enable-threads --with-combined-threads --with-incoming-stack-boundary=2(生成的文件将会保存到/mingw64/local64/fftwout5/文件夹中),然后输入make编译,最后输入make install安装。

3.在生成的文件中找到.dll文件(本人的在/mingw64/local64/fftwout5/bin/中),利用pexports命令(需要安装pexprots安装包)生成.def命令pexports *.dll -o > *.def),最后利用Visual Studio 2008 x64 Win64 Command Prompt生成.lib文件。


三.测试FFTW运行时间。

1.新建64位工程,在项目属性中链接器选项中的input中添加上述生成的.lib文件中,通用选项中加入.lib所在文件夹路径。

2.编写测试代码

在fftw文档中摘录后添加一部分:

#include "stdafx.h"
#include 
#include 
#include 

#define  N 3200
#define  NTIMES 96

void fftwtest( )
{
	fftwf_complex *in[NTIMES]; 
	fftwf_complex *out[NTIMES];
	fftwf_plan p[NTIMES];

	int nthreads = 1;//表示线程个数

	int a=fftwf_init_threads();
	fftwf_plan_with_nthreads(nthreads);
	for(int i=0;i


你可能感兴趣的:(Windows编程,C++,fftw,mingw64,多线程,Windows编程,C++,fftw)