Я пытаюсь научиться использовать FFTW на компьютере с Windows, компилируя с помощью g++ из командной строки Windows. Я прочитал руководство FFTW и поискал по форумам, но ничего не похоже на мою проблему. Я думаю, что не понимаю, как правильно связать библиотеку 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 или в своем собственном. Далее в последней строке ошибки говорится, что «окончательная ссылка не удалась».
C:\Users\1915821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1408): undefined reference to `__imp_fftw_plan_dft_1d'
C:\Users\1915821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1422): undefined reference to `__imp_fftw_execute'
C:\Users\1915821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1435): undefined reference to `__imp_fftw_destroy_plan'
C:\Users\1915821\AppData\Local\Temp\ccnK99CJ.o:FFTW.cpp:(.text+0x1448): undefined reference to `__imp_fftw_free'
C:\Users\1915821\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:\Users\1915821\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
Я также пытался использовать все комбинации верхнего и нижнего регистра -l для ссылок, все возвращают ошибку
cannot find -lfftw3
Если кто-нибудь знает, как правильно связать эти библиотеки или может определить, почему моя ссылка не работает, я ценю помощь. Спасибо.
..filepath..\\"FFTW learning"
, чтобы мы могли помочь вам построить правильную командную строку. - person Botje   schedule 11.12.2019-L
сообщает компоновщику, ГДЕ искать.-l
сообщает компоновщику, ЧТО нужно связать. Поэтому вы должны добавить-L..filepath..\\"FFTW learning" -lllibfftw3-3
. Вы также можете просто использовать-L.
, чтобы указать на текущий каталог. - person Botje   schedule 12.12.2019