2011-04-21 54 views
1

我的目標是編譯kiss_fft庫以在JNI中用於android開發。 然而,首先,我試圖從Kiss_fft(Kissfft )使用Kiss_fft.c或Kiss_fftr.c時,就用我的Linux機器上kiss_fft圖書館C.使用本機C Kiss_fft.c來計算android中的fft

來計算DFT。你到底如何將他們的庫編譯成你自己的文件。在我的源代碼C文件的頂部,我#include kiss_fft.h和#include kiss_fftr.h,也可以將kiss_fft的源代碼放在我的項目根目錄或Linux的/ usr/include /中,然後用makefile文件與此類似:

#Makefile 

#ARGS = -g -ansi -pedantic -Wall -Werror -O1 
ARGS = -g -lsndfile -O1 -lm 


FILES = spec_subv4.o kiss_fftr.o kiss_fft.o 

spec_sub: $(FILES) 
gcc $(ARGS) $(FILES) -o spec_sub 

spec_subv4.o: spec_subv4.c 
gcc -lsndfile $(ARGS) -c spec_subv4.c -o spec_subv4 

kiss_fftr.o: kiss_fftr.c kiss_fftr.h kiss_fftr.h _kiss_fft_guts.h 
gcc $(ARGS) -c kiss_fftr.c -o kiss_fftr 

kiss_fft.o: kiss_fft.c _kiss_fft_guts.h 
gcc $(ARGS) -c kiss_fftr.c -o kiss_fft 

通過所有kiss_fft源文件看,我寫了這個make文件來構建所有的依賴。不過,我仍然得到

undefined reference to kiss_fft

undefined reference to kiss_fft_alloc

哪些是kiss_fft庫的內部功能。

任何幫助,將不勝感激。謝謝

回答

1

工作了,感謝您的輸入。我只是簡單地編譯:

gcc [email protected] -g -lsndfile -lm -std=gnu99 spec_sub_kiss.c kiss_fft.c kiss_fftr.c -o spec_sub_kiss 

凡-lsndfile是讀寫一些.wav文件爲我的項目庫。

1

我認爲符號/函數kiss_fft,kiss_fft_alloc不是任何包含的庫文件的一部分。

幾件事情必須檢查你鏈接之前:

  1. 檢查符號庫中可用sndfile

    納米| grep「kiss_fft」

  2. 檢查您是否在make文件中提到了庫的PATH。

    包括你的庫路徑 -L

  3. 檢查這些函數的原型是較硬的文件

    包括他們 -I

  4. 如果任何C,C++代碼的組合是使用

    使用extern「C」 sytax。

  5. 函數原型必須與庫中包含的原型相匹配。

+0

嗯,那麼kiss_fft()和kiss_fft_alloc()都在kiss_fft.c中,由kiss_fft.h鏈接。當你說包括庫路徑-L你的意思是這樣的: gcc -L ../path-to-kiss_fft-headers-and-.c-files/ – digiphd 2011-04-21 13:15:20

+0

你能解釋一下-l的用法嗎遠遠沒有編譯和lib文件,'.so'。 – digiphd 2011-04-22 02:13:50

2

你的Makefile的目標從來沒有真正編譯kiss_fft.c

例如

​​

編譯kiss_fftr.c不kiss_fft.c

+0

啊正確,簡單的複製粘貼錯誤謝謝。 – digiphd 2011-04-22 01:34:26