Kompiluję program testowy do testowania fftw3 (ver3.3.4). Ponieważ nie jest instalowany z korzenia previlidge polecenie użyłem to:nie można połączyć z biblioteką fftw3
gcc -lm -L/home/my_name/opt/fftw-3.3.4/lib/ -I/home/my_name/opt/fftw-3.3.4/include/ fftwtest.c
gdzie biblioteka jest zainstalowana w
/home/my_name/opt/fftw-3.3.4/
mojego kodu jest 1 poradnik na stronie fftw3 męska:
#include <stdio.h>
#include <fftw3.h>
int main(){
int n = 10;
fftw_complex *in, *out;
fftw_plan p;
in = (fftw_complex*) fftw_malloc(n*sizeof(fftw_complex));
out = (fftw_complex*) fftw_malloc(n*sizeof(fftw_complex));
p = fftw_plan_dft_1d(n, in, out, FFTW_FORWARD, FFTW_ESTIMATE);
fftw_execute(p); /* repeat as needed */
fftw_destroy_plan(p);
fftw_free(in); fftw_free(out);
return 0;
}
podczas kompilacji programu zwraca mi następujące błędy:
/tmp/ccFsDL1n.o: In function `main':
fftwtest.c:(.text+0x1d): undefined reference to `fftw_malloc'
fftwtest.c:(.text+0x32): undefined reference to `fftw_malloc'
fftwtest.c:(.text+0x56): undefined reference to `fftw_plan_dft_1d'
fftwtest.c:(.text+0x66): undefined reference to `fftw_execute'
fftwtest.c:(.text+0x72): undefined reference to `fftw_destroy_plan'
fftwtest.c:(.text+0x7e): undefined reference to `fftw_free'
fftwtest.c:(.text+0x8a): undefined reference to `fftw_free'
collect2: ld returned 1 exit status
Szybkie wyszukiwanie oznacza, że nie łączę się poprawnie z biblioteką, ale co ciekawe, nie narzeka ona na deklarację fftw_plan i fftw_complex. W rzeczywistości, jeśli usunę wszystkie funkcje zaczynające się od "fftw_", zachowując tylko deklarację, przejdzie ona przez kompilację.
Więc dokąd się pomyliłem? Czy linkowanie jest prawidłowe? Wszelkie sugestie będą mile widziane.
I powinienem był umieścić wszystkie flagi po nazwie pliku C. – robinchm
Ach tak, dobry punkt, o którym często zapominam. – downhillFromHere