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 命令指定了库名称。
感谢所有的帮助。
我正在尝试学习在 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 命令指定了库名称。
感谢所有的帮助。