Ich kompiliere ein Testprogramm, um die fftw3 (ver3.3.4) zu testen. Da es nicht mit Root installiert ist previlidge der Befehl I:kann nicht mit der Bibliothek fftw3 verlinken
gcc -lm -L/home/my_name/opt/fftw-3.3.4/lib/ -I/home/my_name/opt/fftw-3.3.4/include/ fftwtest.c
wo die Bibliothek in
/home/my_name/opt/fftw-3.3.4/
Mein Code installiert ist das erste Tutorial auf fftw3 Webseite ist:
#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;
}
Wenn ich das Programm kompiliert, gibt es mir folgende Fehler zurück:
/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
Eine schnelle Suche bedeutet, dass ich nicht korrekt mit der Bibliothek verlinke, aber interessanterweise beklagt es sich nicht über die Deklaration von fftw_plan und fftw_complex. In der Tat, wenn ich alle Funktionen entferne, die mit "fftw_" beginnen und nur die Deklaration beibehalten, wird die Kompilierung bestanden.
Also, wo bin ich falsch gelaufen? Ist die Verknüpfung korrekt? Jeder Vorschlag wäre willkommen.
Und ich hätte alle Flags nach dem Namen der C-Datei gesetzt. – robinchm
Ah ja, ein guter Punkt den ich oft vergesse. – downhillFromHere