如何让 FFTW++ 在 windows 上工作? (对于假人)

How to get FFTW++ working on windows? (for dummies)

我正在使用 Windows 10 和 Visual Studio 2015。在 C++ 中,我需要获取图像的傅里叶变换以在其上应用滤镜。似乎 FFTW++ 是解决此问题的理想解决方案,但我无法编译它,这让我抓狂。我对编程比较陌生,所以我不知道这有多尴尬。

我使用 Visual Studio 中的 NuGet 函数来获取 FFTW 库。 因为我在 NuGet 上找不到它,所以我从以下 link 下载了 FFTW+ 的东西:https://sourceforge.net/projects/fftwpp/ 我将下载的内容复制到项目文件夹,并将头文件包含在解决方案资源管理器中。但它没有编译,抛出许多奇怪的错误(例如:在 seconds.h 中它说某些获取时区的函数已过时,而在 fftww++.h 中它说 std::max是非法的)。

所以在看到这行不通之后,我回到了 FFTW 网站,并尝试使用 Windows 安装指南。 http://www.fftw.org/install/windows.html 我下载了 64 位版本,但我完全不知道如何导入库,甚至不知道它能做什么。 i.imgur.com/Qs7mFQT.png 这就是我得到的全部,我完全迷路了。

我怎样才能编译它? 如果可以的话,请给我写一份尽可能详细的解释,说明如何使用这个东西,我可能很笨,但我真的不知道发生了什么,而且我在 [=29= 上找不到任何教程之类的].

获取64位预编译FFTW 3.3.5 Windows DLL

  1. fftw-3.3.5-dll64.zip
  2. 下载
  3. 解压缩文件。

创建导入库(.lib 文件)

  1. 官方的FFTW指令是here
  2. 有关如何将 DLL link 转换为 Visual Studio C++ 程序的背景信息,这篇 MSDN 文章 Linking an Executable to a DLL especially the part about implicit linking 很有帮助。
  3. 也有帮助,在解压位置,README-WINDOWS。
  4. 打开 Visual Studio 开发人员命令提示符

    • 导航至开始 -> 所有应用程序 -> Visual Studio 2015 -> 开发人员命令提示符
    • 在我的机器上,位置是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat
  5. 导航到解压缩位置并键入

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

(对于单精度或 long-double 精度使用 libfftw3f-3.def 或 libfftw3l-3.def)

  • 这将产生 libfftw3-3.lib
  • 注意这是针对 x64 的。

打开 Visual Studio 并创建 C++ 控制台应用程序

  1. 创建 C++ 控制台应用程序
  2. 接受所有默认设置
  3. 将解决方案平台设置为 x64

告诉 Visual Studio 在哪里可以找到 FFTW 头文件。

(摘自 this SO 答案。)

有多种方法可以做到这一点,这里是一种方法。

  1. 在解决方案资源管理器中,右键单击 项目 和 select 属性。
  2. 添加额外的包含目录。这将是解压缩位置。

(或者,可以将 .h 文件复制到 Visual Studio 项目文件夹中。)

告诉 Visual Studio 在哪里可以找到 FFTW 导入库。

  1. 右键单击项目和 select 属性。
  2. 添加额外的库目录。这将是解压缩位置。
  3. 添加额外的依赖项。键入之前创建的 .lib 文件 (libfftw3-3.lib)。

创建示例程序

(来自FFTW tutorial.)

#include "stdafx.h"

#include <fftw3.h>

int main()
{
    fftw_complex *in, *out;
    fftw_plan p;

    int N = 32;

    in = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
    out = (fftw_complex*)fftw_malloc(sizeof(fftw_complex) * N);
    p = fftw_plan_dft_1d(N, in, out, FFTW_FORWARD, FFTW_ESTIMATE);

    fftw_execute(p); /* repeat as needed */

    fftw_destroy_plan(p);
    fftw_free(in); fftw_free(out);

    return 0;
}

编译

告诉 Windows 在哪里可以找到 FFTW DLL 最简单的方法是将 FFTW DLL (libfftw3-3.dll) 从解压位置复制到 Visual Studio 输出文件夹。

  1. 在 Visual Studio 中右键单击 解决方案 和 select 在文件浏览器中打开文件夹
  2. 导航到 .exe 输出文件夹(例如 fftw_helloworld2\x64\Debug)
  3. 复制 DLL libfftw3-3.dll

运行/调试

  1. 设置断点
  2. 按 F5 或

谢谢,它解决了我遇到的问题。这是我对答案的贡献:

控制台应用程序默认为 x86 arch。我不得不使用 FFTW 人员提供的 32 位 dll。确保在调用 lib 时指定 /machine:x86 这是 VS2017 社区

埃德