1

私の目標は、kiss_fft ライブラリをコンパイルして、Android 開発用の JNI で使用することです。ただし、最初は、C の Linux マシンで Kiss_fft ライブラリを使用しようとしています。

Kiss_fft ( Kissfft ) のKiss_fft.c または Kiss_fftr.c を使用し て DFT を計算する場合。ライブラリを自分のファイルにどのくらい正確にコンパイルしますか。ソース C ファイルの先頭に #include kiss_fft.h と #include kiss_fftr.h を追加し、kiss_fft ソース コードをプロジェクトのルート ディレクトリまたは Linux の /usr/include/ に配置してから、これに似たメイクファイル:

#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 ライブラリの内部関数です。

どんな助けでも大歓迎です。ありがとう

4

3 に答える 3

2

あなたのmakefileターゲットは、実際にはkiss_fft.cをコンパイルしません

例えば

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

kiss_fft.c ではなく、kiss_fftr.c をコンパイルします。

于 2011-04-21T19:07:33.590 に答える
1

I think symbol/function kiss_fft, kiss_fft_alloc are not part of any libary included.

Few things must be checked before you link:

  1. Check if symbols are available in library sndfile

    nm | grep "kiss_fft"

  2. Check if you have mentioned the PATH for library in make file.

    Include your library path as -L

  3. Check if prototypes of these functions are in harder files

    Include them with -I

  4. If any C,C++ combination code is used

    Use extern "C" sytax.

  5. prototypes of functions must match with prototypes included in library.

于 2011-04-21T12:46:07.373 に答える
1

入力してくれてありがとう。私は単に次のようにコンパイルしました:

gcc $@ -g -lsndfile -lm -std=gnu99 spec_sub_kiss.c kiss_fft.c kiss_fftr.c -o spec_sub_kiss

-lsndfile は、プロジェクトの .wav ファイルを読み書きするためのライブラリです。

于 2011-04-28T12:34:56.960 に答える