[英]Using native C Kiss_fft.c to calculate fft in android
我的目標是編譯kiss_fft庫以在JNI中用於android開發。 然而,首先,我試圖在我的Linux機器上使用kiss_fft庫。
當使用來自Kiss_fft( Kissfft )的Kiss_fft.c或Kiss_fftr.c來計算DFT時。 你究竟如何將他們的庫編譯成你自己的文件。 在我的源代碼C文件的頂部,我#include kiss_fft.h和#include kiss_fftr.h,並且還將kiss_fft源代碼放在我的項目根目錄或者/ usr / include /中的linux中,然后我用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庫的內部函數。
任何幫助,將不勝感激。 謝謝
你的makefile目標永遠不會實際編譯kiss_fft.c
例如
kiss_fft.o: kiss_fft.c _kiss_fft_guts.h
gcc $(ARGS) -c kiss_fftr.c -o kiss_fft
編譯kiss_fftr.c而不是kiss_fft.c
我認為符號/功能kiss_fft,kiss_fft_alloc不是任何包含的圖書館的一部分。
在鏈接之前必須檢查幾件事:
檢查庫sndfile中是否有符號可用
nm | grep“kiss_fft”
檢查是否在make文件中提到了PATH for library。
將庫路徑包含為-L
檢查這些函數的原型是否在更難的文件中
用-I包括它們
如果使用任何C,C ++組合代碼
使用extern“C” sytax。
函數原型必須與庫中包含的原型相匹配。
工作了,謝謝你的意見。 我只是簡單編譯:
gcc $@ -g -lsndfile -lm -std=gnu99 spec_sub_kiss.c kiss_fft.c kiss_fftr.c -o spec_sub_kiss
-lsndfile是為我的項目讀取和寫入一些.wav文件的庫。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.