簡體   English   中英

使用原生C Kiss_fft.c來計算android中的fft

[英]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不是任何包含的圖書館的一部分。

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

  1. 檢查庫sndfile中是否有符號可用

    nm | grep“kiss_fft”

  2. 檢查是否在make文件中提到了PATH for library。

    將庫路徑包含為-L

  3. 檢查這些函數的原型是否在更難的文件中

    用-I包括它們

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

    使用extern“C” sytax。

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

工作了,謝謝你的意見。 我只是簡單編譯:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM