编译FFT时使用“未定义参考...”(使用FFTW3库)

时间:2017-03-30 03:23:35

标签: compiler-errors fftw

所以,我正在尝试使用来自vesperix.com(版本3.2.2)的编辑FFTW交叉编译到ARM

但是,当我尝试使用此命令编译我的代码

$ arm-linux-gnueabi-gcc -o fft fftw_example.c -L/usr/local/lib/lfftw3.a -lm 

出现此错误

/tmp/ccFFFtbv.o: In function `main':
fftw_example.c:(.text+0x34c): undefined reference to `fftw_plan_dft_1d'
fftw_example.c:(.text+0x368): undefined reference to `fftw_execute'
fftw_example.c:(.text+0x380): undefined reference to `fftw_destroy_plan'
collect2: error: ld returned 1 exit status

有谁知道为什么?以及如何解决它?

这是我的ARM fftw代码,我使用某人来自互联网的代码。

/* Start reading here */

#include <fftw3.h>

#define NUM_POINTS 64


/* Never mind this bit */

#include <stdio.h>
#include <math.h>

#define REAL 0
#define IMAG 1

void acquire_from_somewhere(fftwf_complex* signal) {
    /* Generate two sine waves of different frequencies and
     * amplitudes.
     */

    int i;
    for (i = 0; i < NUM_POINTS; ++i) {
        double theta = (double)i / (double)NUM_POINTS * M_PI;

        signal[i][REAL] = 1.0 * cos(10.0 * theta) +
                          0.5 * cos(25.0 * theta)  ;

        signal[i][IMAG] = 1.0 * sin(10.0 * theta) +
                          0.5 * sin(25.0 * theta);
    }
}

void do_something_with(fftwf_complex* result) {
    int i;
    for (i = 0; i < NUM_POINTS; ++i) {
        double mag = sqrt(result[i][REAL] * result[i][REAL] +
                          result[i][IMAG] * result[i][IMAG]);

        printf("%g\n", mag);
    }
}


/* Resume reading here */

int main() {
    fftwf_complex signal[NUM_POINTS];
    fftwf_complex result[NUM_POINTS];

    fftwf_plan plan = fftwf_plan_dft_1d(NUM_POINTS,
                                      signal,
                                      result,
                                      FFTW_FORWARD,
                                      FFTW_ESTIMATE);

    acquire_from_somewhere(signal);
    fftwf_execute(plan);
    do_something_with(result);

    fftwf_destroy_plan(plan);
    fftwf_cleanup();

    return 0;
}

1 个答案:

答案 0 :(得分:0)

您是否在代码中添加了fftw.h文件?