1

我正在尝试在 Android 上使用 fftw3 库,并启用浮点精度。

我已经编译了 fftw3 源代码,正如这个问题中所解释的那样。 我添加了这里提到的“--enable-float” 所以我创建了 fftw 库并将它们放入另一个 Android 项目中。我集成了它们,以便我可以使用该库。当我使用 fftw 的双重方法时,一切正常。但:

我尝试使用 fftw 的 float 方法,但如果我尝试这样做,我会收到以下错误:

Install        : libfftw3.so => libs/armeabi/libfftw3.so
Compile thumb  : hello-jni <= hello-jni.c
jni/hello-jni.c: In function 'dst_test':
jni/hello-jni.c:85:15: warning: assignment from incompatible pointer type [enabled by default]
SharedLibrary  : libhello-jni.so
/opt/android-ndk/toolchains/arm-linux-androideabi-4.6/prebuilt/linux-x86_64/bin/../lib/gcc/arm-linux-androideabi/4.6/../../../../arm-linux-androideabi/bin/ld: ./obj/local/armeabi/objs/hello-jni/hello-jni.o: in function dst_test:jni/hello-jni.c:85: error: undefined reference to 'fftwf_plan_r2r_1d'
collect2: ld returned 1 exit status
make: *** [obj/local/armeabi/libhello-jni.so] Error 1

我的猜测是,当我集成库时,我做错了。我做了一个

#include "api/fftw3.h"

在我的 c 文件中。

我的 Android.mk 看起来像这样:

LOCAL_PATH := $(call my-dir)
# Prebuilt FFTW library
include $(CLEAR_VARS)
LOCAL_MODULE := fftw3
LOCAL_SRC_FILES := libfftw3.so
LOCAL_EXPORT_C_INCLUDES := $(LOCAL_PATH)/include
include $(PREBUILT_SHARED_LIBRARY)
include $(CLEAR_VARS)

LOCAL_MODULE    := hello-jni
LOCAL_SRC_FILES += hello-jni.c
LOCAL_SHARED_LIBRARIES := fftw3
LOCAL_LDLIBS := -llog
include $(BUILD_SHARED_LIBRARY)

互联网上有一些 fftw + android 教程,但我找不到任何关于集成它的“浮动版本”的信息。

4

1 回答 1

0

我实际上也遇到了 FFTW3 的问题,但略有不同。我认为您的问题的答案在于构建带有浮动支持的软件包。将 --enable-float 添加到您的 ./configure 命令应该可以解决问题。构建完成后,您可以像包含 fftw3 一样包含它,只需将其设为 fftw3f。

祝你好运。

于 2014-01-10T17:47:55.853 回答