Моя цель - собрать библиотеки 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.
Любая помощь будет оценена по достоинству. Благодаря
Разработал это, спасибо за ввод. Я просто скомпилировал с помощью:
gcc $@ -g -lsndfile -lm -std=gnu99 spec_sub_kiss.c kiss_fft.c kiss_fftr.c -o spec_sub_kiss
Где -sndfile - это библиотеки для чтения и записи некоторых .wav файлов для моего проекта.
Цели 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
нм | grep "kiss_fft"
Убедитесь, что вы указали PATH для библиотеки в файле make.
Включите свой путь к библиотеке как -L
Проверьте, находятся ли прототипы этих функций в более сложных файлах
Включите их с -I
Если используется какой-либо код комбинации C, С++
Используйте extern "C" sytax.
прототипы функций должны соответствовать прототипам, включенным в библиотеку.