如何在Windows上使用FFTW ++? (对于傻瓜)

问题描述 投票:6回答:2

我正在使用Windows 10和Visual Studio 2015.在C ++中,我需要对图像进行傅立叶变换以对其应用滤镜。似乎FFTW ++是理想的解决方案,但我不能让它编译,它让我疯了。我对编程比较陌生,所以我不知道这有多尴尬。

我在Visual Studio中使用NuGet函数来获取FFTW库。由于我在NuGet上找不到它,我从以下链接下载了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这就是我得到的,我完全迷失了。

我怎样才能编译它?如果你可以:尽可能详细地给我写一个关于如何使用这个东西的解释,我可能会愚蠢但我真的不知道发生了什么,我在Google上找不到任何教程。

c++ windows visual-studio fftw
2个回答
13
投票

获取64位预编译的FFTW 3.3.5 Windows DLL

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

创建导入库(.lib文件)

  1. 官方的FFTW指令是here
  2. 有关如何将DLL链接到Visual Studio C ++程序的背景知识,这篇MSDN文章Linking an Executable to a DLL特别是关于implicit linking的部分是有帮助的。
  3. 在解压缩位置,README-WINDOWS也很有帮助。
  4. 打开Visual Studio Developer命令提示符 导航到开始 - >所有应用程序 - > Visual Studio 2015 - >开发人员命令提示符 在我的机器上,位置是C:\ Program Files(x86)\ Microsoft Visual Studio 14.0 \ Common7 \ Tools \ VsDevCmd.bat
  5. 导航到解压缩位置并键入 lib /machine:x64 /def:libfftw3-3.def

Generate .lib file

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

  • 这将产生libfftw3-3.lib
  • 请注意,这适用于x64。

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

  1. 创建一个C ++控制台应用程序New visual studio C++ console app
  2. 接受所有默认设置Keep default settings
  3. 将解决方案平台设置为x64 x64 platform

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

(摘自this SO回答。)

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

  1. 在解决方案资源管理器中,右键单击项目并选择属性。 Project properties
  2. 添加其他包含目录。这将是解压缩位置。 Additional include directories

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

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

  1. 右键单击项目并选择属性。 Project properties
  2. 添加其他库目录。这将是解压缩位置。 Additional library directories
  3. 添加其他依赖项。键入之前创建的.lib文件(libfftw3-3.lib)。 Additional dependency

创建示例程序

(来自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中,右键单击解决方案,然后选择“文件资源管理器”中qazxsw poi
  2. 导航到.exe输出文件夹(例如fftw_helloworld2 \ x64 \ Debug)Solution in File Explorer
  3. 复制DLL libfftw3-3.dll

运行/调试

  1. 设置断点
  2. 按F5或Exe output folder

0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.