1

float 精度を有効にして、Android で fftw3 ライブラリを使用しようとしています。

この質問で説明されているように、fftw3 ソース コードをコンパイルしました。 ここで述べたように、「--enable-float」を追加しました そこで、fftw ライブラリを作成し、それらを別の Android プロジェクトに配置しました。ライブラリを使用できるように、それらを統合しました。fftw の double メソッドを使用すると、すべて正常に動作します。しかし:

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 のチュートリアルがいくつかありますが、その「float バージョン」の統合については何も見つかりませんでした。

4

1 に答える 1