静态链接fftw3到共享库

时间:2010-08-10 23:06:05

标签: android android-ndk ld static-linking fftw

我正在开发一些针对Android的音高修正软件,我希望使用NDK让fftw3在Android上运行。

音调校正库(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'

使用ndk-build编译talentedhack共享库时。它似乎正在正确地拾取文件,这令人费解。

我的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构建系统没有正确处理静态库的问题。 任何帮助都将非常感激。

0 个答案:

没有答案