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

后端 未结 2 566
轮回少年
轮回少年 2020-12-13 22:46

I\'m using Windows 10 and Visual Studio 2015. In C++, I need to get the Fourier-transform of an image for applying filters on it. It seems that FFTW++ is the ideal solution

2条回答
  •  生来不讨喜
    2020-12-13 23:19

    Get the 64bit precompiled FFTW 3.3.5 Windows DLL

    1. Download from fftw-3.3.5-dll64.zip
    2. Unzip the file.

    Create the import library (.lib file)

    1. The official FFTW instructions are here.
    2. For background on how to link a DLL to a Visual Studio C++ program this MSDN article Linking an Executable to a DLL especially the part about implicit linking is helpful.
    3. Also helpful, in the unzip location, README-WINDOWS.
    4. Open the Visual Studio Developer Command prompt

      • Navigate to Start -> All Apps -> Visual Studio 2015 -> Developer Command prompt
      • On my machine the location is C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat
    5. Navigate to the unzip location and type

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

    (for single or long-double precision use libfftw3f-3.def or libfftw3l-3.def)

    • This will produce libfftw3-3.lib
    • Note this is for x64.

    Open Visual Studio and Create a C++ Console Application

    1. Create a C++ Console application
    2. Accept all the default settings
    3. Set the solution platform to x64

    Tell Visual Studio where to find the FFTW header file.

    (Taken from this SO answer.)

    There are various ways to do this, here is one way.

    1. In the solution explorer, right click on the project and select properties.
    2. Add additional include directories. This will be the unzip location.

    (Alternatively, the .h file can be copied into the Visual Studio project folder.)

    Tell Visual Studio where to find the FFTW import library.

    1. Right click on the project and select properties.
    2. Add additional library directories. This will be the unzip location.
    3. Add additional dependency. Type in the .lib file created earlier (libfftw3-3.lib).

    Create a sample program

    (From the FFTW tutorial.)

    #include "stdafx.h"
    
    #include 
    
    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;
    }
    

    Compile

    Tell Windows where to find the FFTW DLL The easiest way is to copy the FFTW DLL (libfftw3-3.dll) from the unzip location to the Visual Studio output folder.

    1. In Visual Studio right click on the solution and select Open Folder in File Exporer.
    2. Navigate to the .exe output folder (e.g. fftw_helloworld2\x64\Debug)
    3. Copy the DLL libfftw3-3.dll

    Run / Debug

    1. Set a breakpoint
    2. Press F5 or

提交回复
热议问题