статическое связывание fftw3 в разделяемую библиотеку - PullRequest
1 голос
/ 11 августа 2010

Я работаю над некоторым программным обеспечением для коррекции высоты тона для Android и хочу, чтобы fftw3 работал на Android с использованием NDK.

Библиотека коррекции высоты тона (talentedhack, http://code.google.com/p/talentledhack/, если кто-то хочет знать) зависит от fftw3, поэтому я пытаюсь скомпилировать fftw3 как статическую библиотеку, а затем связать ее с общей библиотекой talentedhack. В настоящее время у меня есть сборка fftw3 в виде статической библиотеки libfftw3.a, но я продолжаю получать неразрешенные ссылочные ошибки, подобные этой

bin/ndk/local/armeabi/objs/talentedhack/fft.o: In function `fft_inverse':
jni/talentedhack/fft.c:51: undefined reference to `fftwf_execute'

при компиляции разделяемой библиотеки talentedhack с помощью ndk-build. Похоже, он правильно подбирает файл, что вызывает недоумение.

Соответствующие части моего файла Android.mk выглядят так:

LOCAL_MODULE := talentedhack
LOCAL_CFLAGS := -std=c99
LOCAL_SRC_FILES := talentedhack.c other_source_files.c
LOCAL_C_INCLUDES := $(LOCAL_PATH)/fftw3/api
LOCAL_STATIC_LIBRARIES := fftw3
LOCAL_LDLIBS := -llog

include $(BUILD_SHARED_LIBRARY)

Команда, которая завершается неудачно при вызове ndk-build с верхнего уровня проекта, является следующей:

/opt/android-ndk-linux/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/arm-eabi-gcc -nostdlib -Wl,-soname,libtalentedhack.so -Wl,-shared,-Bsymbolic /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/circular_buffer.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/fft.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/formant_corrector.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/lfo.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/pitch_detector.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/pitch_shifter.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/pitch_smoother.o /path/to/project/bin/ndk/local/armeabi/objs/talentedhack/quantizer.o /path/to/project/ndk/local/armeabi/objs/talentedhack/talentedhack.o -Wl,--whole-archive -Wl,--no-whole-archive /path/to/project/bin/ndk/local/armeabi/libfftw3.a /opt/android-ndk-linux/build/prebuilt/linux-x86/arm-eabi-4.4.0/bin/../lib/gcc/arm-eabi/4.4.0/libgcc.a /opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib/libc.so /opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib/libstdc++.so /opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib/libm.so -Wl,--no-undefined -Wl,-z,noexecstack -L/opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib -llog -Wl,-rpath-link=/opt/android-ndk-linux/build/platforms/android-8/arch-arm/usr/lib -o /path/to/project/bin/ndk/local/armeabi/libtalentedhack.so

Я не уверен, является ли это проблемой с fftw3, так как я следовал их инструкциям по портированию (захватите подмножество исходных файлов, вручную сконфигурируйте и соберите их), так как система фактически не имеет fftwf_execute или любые другие функции, определенные в любом заголовке (что я могу сказать) из-за использования некоторых причудливых макросов или из-за проблем с системой сборки Android NDK, которая неправильно обрабатывает статические библиотеки. Любая помощь будет принята с благодарностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...