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

1

Моя цель - собрать библиотеки 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, а также либо поместите код сука kiss_fft в корневой каталог проекта, либо в /usr/include/in 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
jni
kissfft

3 ответа

1
Лучший ответ

Разработал это, спасибо за ввод. Я просто скомпилировал с помощью:

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

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

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_fftr.c не kiss_fft.c

  • 0
    ааа, правильно, просто ошибка копирования и вставки спасибо.
1

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

Перед связыванием необходимо проверить несколько вещей:

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

    нм | grep "kiss_fft"

  • Убедитесь, что вы указали PATH для библиотеки в файле make.

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

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

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

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

    Используйте extern "C" sytax.

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

  • 0
    Хм, хорошо, kiss_fft () и kiss_fft_alloc () оба находятся в kiss_fft.c, связанном с kiss_fft.h. Когда вы говорите, включить путь к библиотеке -L, вы имеете в виду что-то вроде: gcc -L ../path-to-kiss_fft-headers-and-.c-files/
  • 0
    Можете ли вы объяснить использование -l, пока я не скомпилировал и lib файлы, '.so'.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню