2014-08-29 22 views
6

Tôi đang biên dịch một chương trình thử nghiệm để kiểm tra fftw3 (ver3.3.4). Vì nó không được cài đặt với gốc previlidge lệnh tôi sử dụng là:không thể liên kết đến thư viện 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 

nơi thư viện được cài đặt trong

/home/my_name/opt/fftw-3.3.4/ 

Mã của tôi là hướng dẫn 1 trên trang web fftw3 của:

#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; 
} 

khi tôi biên soạn chương trình, nó trả lại cho tôi các lỗi sau:

/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 

Tìm kiếm nhanh ngụ ý rằng tôi không liên kết với thư viện một cách chính xác, nhưng thú vị là nó không phàn nàn về việc khai báo fftw_plan và fftw_complex. Trong thực tế, nếu tôi loại bỏ tất cả các chức năng bắt đầu bằng "fftw_", chỉ giữ nguyên khai báo, nó sẽ vượt qua quá trình biên dịch.

Vậy tôi đã đi sai ở đâu? Liên kết có đúng không? Bất kỳ đề nghị sẽ được đánh giá cao.

Trả lời

6

Bạn đã nói cho người liên kết biết nơi tìm thư viện qua số -L, nhưng bạn chưa cho biết thư viện nào liên kết tới. Sau đó, bạn thực hiện bằng cách thêm -lfftw3 vào cuối dòng, trước -lm.

Ngoài ra, cờ -L cần được liệt kê sau fftwtest.c.

+0

Và tôi nên đặt tất cả cờ sau tên của tệp C. – robinchm

+0

Ah vâng, một điểm tốt tôi thường quên. – downhillFromHere

1

Bạn cũng cần thêm rằng bạn liên kết đến thư viện fftw.

Thêm một cái gì đó như:

-lfftw 

Nó phụ thuộc vào những gì các tập tin thư viện là thực sự gọi. (Lưu ý cách bạn làm điều đó cho thư viện toán học với -lm.)

Các vấn đề liên quan