2014-08-29 112 views
6

我正在編譯一個測試程序來測試fftw3(ver3.3.4)。由於它不與根安裝previlidge我用的命令是:無法鏈接到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 

在庫安裝

/home/my_name/opt/fftw-3.3.4/ 

我的代碼是fftw3網站上的第一個教程:

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

當我編譯程序時,它返回以下錯誤:

/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 

快速搜索意味着我沒有正確鏈接到庫,但有趣的是,它不會抱怨fftw_plan和fftw_complex的聲明。事實上,如果我刪除所有以「fftw_」開頭的函數,只保留聲明,它將通過編譯。

那麼我哪裏出錯了?鏈接是否正確?任何建議,將不勝感激。

回答

6

您已通過-L告訴鏈接器哪裏可以找到該庫,但是您還沒有告訴它該鏈接哪個庫。後者通過在-lm之前添加-lfftw3來完成。

此外,-L標誌需要在fftwtest.c之後列出。

+0

我應該把所有的標誌放在C文件的名字後面。 – robinchm 2014-08-29 12:59:30

+0

啊,是的,我經常忘記一個好點。 – downhillFromHere 2014-08-29 13:20:27

1

您還需要添加一個鏈接到fftw庫。

添加類似:

-lfftw 

這取決於什麼庫文件實際上是調用。 (請注意,你如何爲數學庫做-lm。)