【问题标题】:C++ code doesn't run while using fftw library使用 fftw 库时 C++ 代码不运行
【发布时间】:2018-04-21 22:14:26
【问题描述】:

我正在尝试使用 fftw 库 (link to FFTW documentation) 实现 DFT。

所有库都已正确链接,项目构建良好。但是,当调用 fftw 库中的任何函数时,代码不会运行。

#include <iostream>
#include <fftw3.h>

using namespace std;

int main() {

    int vectorSize = 100;
    cout << vectorSize << endl;

    fftw_complex vec[vectorSize], vecOut[vectorSize];

    for(int i = 0; i < vectorSize; i++) {
        vec[i][0] = i;
        vec[i][1] = 1;
    }

    // Call to function to create an FFT plan
    fftw_plan plan = fftw_plan_dft_1d(vectorSize, vec, vecOut, FFTW_FORWARD, FFTW_ESTIMATE);

    cout << "test" << endl;

    return 0;
}

如果我注释 fftw_plan 实例化的行,代码会按预期输出 100 和“test”。据我所知,构建中没有问题。我真的找不到任何描述类似问题的帖子。

我在 Eclipse 上运行它,使用 MinGW 和可用于 Windows (download link) 的预编译二进制文件的 32 位版本。

任何帮助将不胜感激:)

【问题讨论】:

  • 如果在调试器上点击 Pause 会发生什么?代码是否仍在运行,还是在调用fftw_plan_dft_1d 时崩溃。您是否尝试过其他 fftw 调用,更简单的调用? documentation I found 建议调用fftw_malloc,所以我不确定在堆栈上创建fftw_complex 是否会导致问题。我建议尝试一个更简单的函数调用,看看它是否有效。
  • 调试器不按顺序终止,并且永远不会到达我在代码中放置的任何断点。
  • 只是想重新迭代,代码本身并没有“崩溃”。它不输出任何东西,我不确定它是否在后台工作(我猜是,因为没有错误)

标签: c++ eclipse mingw fftw


【解决方案1】:

Fftw 要求输入/输出为 16 字节对齐。当您在堆栈上声明数组时,不能保证这一点。所以你需要调用 fftw_malloc 或其他函数来分配数组。此外,您的代码仅创建计划但不执行计划,因此不会对输入数据执行 fft。

【讨论】:

  • 我意识到我没有一直执行 fft 算法。我上传这个 sn-p 的原因是为了表明无论我对库进行的任何调用(包括 fftw_malloc())都不会生成任何输出。
  • 这很好奇。我使用 VS2017 编译和链接您的代码,它运行正常。您的 mingw 安装或 lib 生成有问题?
  • 是的,我认为可能与 mingw 版本或其他内容存在冲突。不过谢谢……我想我会尝试使用 Visual Studio :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多