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

时间:2016-09-24 10:41:10

标签: c++ windows visual-studio fftw

我正在使用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 这就是我得到的,我完全迷失了。

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

2 个答案:

答案 0 :(得分:13)

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

  1. fftw-3.3.5-dll64.zip
  2. 下载
  3. 解压缩文件。
  4. 创建导入库(.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

    6. 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
      4. 告诉Visual Studio在哪里可以找到FFTW头文件。

        (取自this SO回答。)

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

        1. 在解决方案资源管理器中,右键单击项目并选择属性。 Project properties
        2. 添加其他包含目录。这将是解压缩位置。 Additional include directories
        3. (或者,可以将.h文件复制到Visual Studio项目文件夹中。)

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

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

            (来自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中右键单击解决方案,然后选择在文件导出器中打开文件夹Solution in File Explorer
            2. 导航到.exe输出文件夹(例如fftw_helloworld2 \ x64 \ Debug) Exe output folder
            3. 复制DLL libfftw3-3.dll
            4. 运行/调试

              1. 设置断点
              2. 按F5或 Start debugger

答案 1 :(得分:0)

多亏了这一点,它解决了我遇到的问题。以下是我对答案的贡献:

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