FFTW 在 windows 机器上链接 g++ 错误

FFTW linking with g++ error on windows machine

我正在尝试学习在 windows 机器上使用 FFTW,从 windows 命令行使用 g++ 进行编译。我已经阅读了 FFTW 手册并搜索了论坛,但似乎没有什么与我的问题相同。我想我不明白如何正确地 link 到 FFTW 库。我已经下载了 FFTW3.zip 文件并将所有文件复制到我的 .cpp 文件所在的目录中。我的简单示例是使用提供的代码转换正弦波:

#include<iostream>
#include<math.h>
#include<string.h>
#include<studio.h>
#include<bits/stdc++.h>
#include<fftw3.h>



int main(){
        int length = 1000;
        fftw_complex time[length];
        fftw_complex signal[length];
        fftw_complex fftsignal[length];
        double omega = 1;
        for (int i=0;i<length;i++){
            time[i][0] = 0.1*i;
            time[i][1] = 0;
            signal[i][0] = sin(time[i][0]*omega);
            signal[i][1] = 0;
        }

        ofstream savefile;
        string name = "sinwave.txt";
        savefile.open(name);
        for (int i=0;i<length;i++){
            savefile <<time[i][0]<<"\t"<<signal[i][0]<<endl;
        }
        savefile.close();

        fftw_plan my_plan;

        my_plan = fftw_plan_dft_1d(length,signal,fftsignal,FFTW_FORWARD,FFTW_ESTIMATE);

        fftw_execute(my_plan);
        fftw_destroy_plan(my_plan);
        fftw_free(signal);
        fftw_free(fftsignal);
    }

我使用的编译命令是:

g++ -I..filepath..\"FFTW learning" -L..filepath..\"FFTW learning" -std=c++11 FFTW.cpp -Lfftw3 -lm

该错误为我提供了对无法在 fftw3 文件或我自己的文件中找到的各种对象的多个未定义引用。它进一步指出 "the final link failed" 在错误的最后一行。

C:\Users15821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1408): undefined reference to `__imp_fftw_plan_dft_1d'
C:\Users15821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1422): undefined reference to `__imp_fftw_execute'
C:\Users15821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1435): undefined reference to `__imp_fftw_destroy_plan'
C:\Users15821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1448): undefined reference to `__imp_fftw_free'
C:\Users15821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x145b): undefined reference to `__imp_fftw_free'
c:/programs/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: C:\Users15821\AppData\Local\Temp\ccnK99CJ.o: bad reloc address 0x0 in section `.pdata'
c:/programs/mingw64/bin/../lib/gcc/x86_64-w64-mingw32/4.7.1/../../../../x86_64-w64-mingw32/bin/ld.exe: final link failed: Invalid operation
collect2.exe: error: ld returned 1 exit status

我也试过对links使用大写和小写-l的所有组合,所有return错误

cannot find -lfftw3

如果有人知道如何正确地 link 这些库,或者可以找出为什么我的 linking 不起作用,我感谢您的帮助。 谢谢。

因为它在 Windows 上,我怀疑 fftw 是作为 .lib 文件提供的。在这种情况下,您不能只使用 -l(仅适用于 .a 和 .so 文件),您需要使用 -llibfftw3。这偏离了惯例,但 Mingw 也有同样的说法。

我把我的链接目录命令误认为是库名命令。正确的 g++ 命令为:

g++ -I\tawe_dfs\students15821\Desktop\"C++ Programs"\"FFTW learning" -L\tawe_dfs\students15821\Desktop\"C++ Programs"\"FFTW learning" -std=c++11 FFTW.cpp -llibfftw3-3

这个错误凸显了我的无知,因为 -L 命令指定了编译器的目录,而 -l 命令指定了库名称。

感谢所有的帮助。