2014-08-29 16 views
6

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.

Odpowiedz

6

Powiedziałeś linkerowi, gdzie znaleźć bibliotekę poprzez -L, ale nie powiedziałeś mu, do której biblioteki ma prowadzić link. Ten ostatni robisz, dodając -lfftw3 na końcu wiersza, przed -lm.

Dodatkowo, flaga -L musi być wymieniona po fftwtest.c.

+0

I powinienem był umieścić wszystkie flagi po nazwie pliku C. – robinchm

+0

Ach tak, dobry punkt, o którym często zapominam. – downhillFromHere

1

Należy również dodać, że łącze do biblioteki fftw.

Dodaj coś takiego:

-lfftw 

To zależy od tego, co faktycznie jest plik biblioteki nazywa. (Zauważ, jak to zrobić dla biblioteki matematycznej z -lm.)

Powiązane problemy