2014-02-26 89 views
5

我想編譯一個程序與Netbeans(g ++),包括拉奎拉,an open source libary。我跟着the installation instructions未定義的引用與外部C

但嘗試編譯一個小的測試程序時,我得到這個錯誤

In function `Aquila::OouraFft::fft(double const*)':OouraFft.cpp:(.text+0x24f): 
undefined reference to `cdft' 

OouraFft.h:

#include "Fft.h" 

extern "C" { 
    void cdft(int, int, double *, int *, double *); //prototypes of offending function 
    void rdft(int, int, double *, int *, double *); //second one. 
} 

libs文件夾中的C文件中包含的函數的定義。

導致實際的錯誤在 OouraFft.cpp行:

// let's call the C function from Ooura's package 
    cdft(2*N, -1, a, ip, w); 

所以我想到的是外部C文件不被與項目掛鉤,但包括在項目目錄中的所有目錄。 我一直在谷歌搜索幾個小時,無法弄清楚。

+0

有該C文件的頭文件?是,然後嘗試使用'extern「C」{「MyCHeader.h」 }' –

+3

實際上,這看起來像一個鏈接錯誤而不是編譯錯誤。你有沒有想過爲你的圖書館添加一個鏈接選項? EG如果它被稱爲'libfft',你會想要將'-lfft'添加到鏈接行。即使你有一個單獨的源文件,並且認爲你只是編譯,你也會鏈接(也許作爲編譯步驟的一部分),並且需要指定鏈接到哪個庫。 – abligh

回答

5

至於git版本6f5d6b,Aquila的CMake配置默認會生成靜態庫。您應該將/path-to-your-build-tree/lib/libOoura_fft.a複製到/path-to-your-install-dir/lib/,並將其鏈接到您的測試程序。

+2

您還必須確保ooura_fft在您的庫中已鏈接......我遇到了同樣的問題,並認爲ooura_fft的東西將包含在libAquila.a中。因此,將libOoura_fft.a複製到lib目錄中,並將-looura_fft包含在makefile中。 –

1

由於Answeror說你需要將libOoura_fft.a放在正確的位置(/usr/local/liblibAquila.a的默認值)。

您還需要鏈接到它作爲克里斯範德維爾德說,但你應該鏈接到-lOoura_fft(第一個「O」大寫)。你應該鏈接-lAquila以及

只是想澄清。