Использование родного C Kiss_fft.c для расчета FFT в Android - PullRequest
1 голос
/ 21 апреля 2011

Моя цель - собрать библиотеки kiss_fft для использования в JNI для разработки под Android.Однако для начала я пытаюсь просто использовать библиотеки kiss_fft на моем компьютере с Linux в C.

при использовании Kiss_fft.c или Kiss_fftr.c из Kiss_fft ( Kissfft ) для вычисленияДПФ.Как именно вы компилируете их библиотеки в свой собственный файл.В верхней части моего исходного C-файла я #include kiss_fft.h и #include kiss_fftr.h, а также либо помещаю код souce kiss_fft в корневой каталог моего проекта, либо в / usr / include / в linux, затем компилирую с помощьюmake-файл похож на этот:

#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.

Любая помощь будет принята с благодарностью.Спасибо

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

Ваши целевые файлы makefile фактически никогда не компилируют

1 голос
/ 28 апреля 2011

Разобрался, спасибо за вклад.Я просто скомпилировал:

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

Где -lsndfile - это библиотеки для чтения и записи некоторых файлов .wav для моего проекта.

1 голос
/ 21 апреля 2011

Я думаю, что символы / функции kiss_fft, kiss_fft_alloc не входят ни в один из включенных библиотек.

Немного вещей необходимо проверить перед установкой ссылки:

  1. Проверьте, являются ли символыдоступно в библиотеке sndfile

    nm |grep "kiss_fft"

  2. Проверьте, упоминали ли вы PATH для библиотеки в файле make.

    Включите путь к вашей библиотеке в виде -L

  3. Проверьте, находятся ли прототипы этих функций в более сложных файлах

    Включите их с -I

  4. Если используется какой-либо код комбинации C, C ++

    Использовать extern "C" синтаксис.

  5. Прототипы функций должны совпадать с прототипами, включенными в библиотеку.

...