如何让 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
- 从fftw-3.3.5-dll64.zip
下载
- 解压缩文件。
创建导入库(.lib 文件)
- 官方的FFTW指令是here。
- 有关如何将 DLL link 转换为 Visual Studio C++ 程序的背景信息,这篇 MSDN 文章 Linking an Executable to a DLL especially the part about implicit linking 很有帮助。
- 也有帮助,在解压位置,README-WINDOWS。
打开 Visual Studio 开发人员命令提示符
- 导航至开始 -> 所有应用程序 -> Visual Studio 2015 -> 开发人员命令提示符
- 在我的机器上,位置是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat
导航到解压缩位置并键入
lib /machine:x64 /def:libfftw3-3.def
(对于单精度或 long-double 精度使用 libfftw3f-3.def 或 libfftw3l-3.def)
- 这将产生 libfftw3-3.lib
- 注意这是针对 x64 的。
打开 Visual Studio 并创建 C++ 控制台应用程序
- 创建 C++ 控制台应用程序
- 接受所有默认设置
- 将解决方案平台设置为 x64
告诉 Visual Studio 在哪里可以找到 FFTW 头文件。
(摘自 this SO 答案。)
有多种方法可以做到这一点,这里是一种方法。
- 在解决方案资源管理器中,右键单击 项目 和 select 属性。
- 添加额外的包含目录。这将是解压缩位置。
(或者,可以将 .h 文件复制到 Visual Studio 项目文件夹中。)
告诉 Visual Studio 在哪里可以找到 FFTW 导入库。
- 右键单击项目和 select 属性。
- 添加额外的库目录。这将是解压缩位置。
- 添加额外的依赖项。键入之前创建的 .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 输出文件夹。
- 在 Visual Studio 中右键单击 解决方案 和 select 在文件浏览器中打开文件夹 。
- 导航到 .exe 输出文件夹(例如 fftw_helloworld2\x64\Debug)
- 复制 DLL libfftw3-3.dll
运行/调试
- 设置断点
- 按 F5 或
谢谢,它解决了我遇到的问题。这是我对答案的贡献:
控制台应用程序默认为 x86 arch。我不得不使用 FFTW 人员提供的 32 位 dll。确保在调用 lib 时指定 /machine:x86
这是 VS2017 社区
埃德
我正在使用 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
- 从fftw-3.3.5-dll64.zip 下载
- 解压缩文件。
创建导入库(.lib 文件)
- 官方的FFTW指令是here。
- 有关如何将 DLL link 转换为 Visual Studio C++ 程序的背景信息,这篇 MSDN 文章 Linking an Executable to a DLL especially the part about implicit linking 很有帮助。
- 也有帮助,在解压位置,README-WINDOWS。
打开 Visual Studio 开发人员命令提示符
- 导航至开始 -> 所有应用程序 -> Visual Studio 2015 -> 开发人员命令提示符
- 在我的机器上,位置是 C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\Tools\VsDevCmd.bat
导航到解压缩位置并键入
lib /machine:x64 /def:libfftw3-3.def
(对于单精度或 long-double 精度使用 libfftw3f-3.def 或 libfftw3l-3.def)
- 这将产生 libfftw3-3.lib
- 注意这是针对 x64 的。
打开 Visual Studio 并创建 C++ 控制台应用程序
- 创建 C++ 控制台应用程序
- 接受所有默认设置
- 将解决方案平台设置为 x64
告诉 Visual Studio 在哪里可以找到 FFTW 头文件。
(摘自 this SO 答案。)
有多种方法可以做到这一点,这里是一种方法。
- 在解决方案资源管理器中,右键单击 项目 和 select 属性。
- 添加额外的包含目录。这将是解压缩位置。
(或者,可以将 .h 文件复制到 Visual Studio 项目文件夹中。)
告诉 Visual Studio 在哪里可以找到 FFTW 导入库。
- 右键单击项目和 select 属性。
- 添加额外的库目录。这将是解压缩位置。
- 添加额外的依赖项。键入之前创建的 .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 输出文件夹。
- 在 Visual Studio 中右键单击 解决方案 和 select 在文件浏览器中打开文件夹 。
- 导航到 .exe 输出文件夹(例如 fftw_helloworld2\x64\Debug)
- 复制 DLL libfftw3-3.dll
运行/调试
- 设置断点
- 按 F5 或
谢谢,它解决了我遇到的问题。这是我对答案的贡献:
控制台应用程序默认为 x86 arch。我不得不使用 FFTW 人员提供的 32 位 dll。确保在调用 lib 时指定 /machine:x86 这是 VS2017 社区
埃德