1

Android プロジェクトで fftw3 ライブラリを使用する必要があります。ライブラリは、このガイドのわずかに変更されたスクリプトを使用してコンパイルされました

ここにあります

INSTALL_DIR="`pwd`/jni/fftw3"
SRC_DIR="`pwd`/../fftw-3.3.2"
NDK_ROOT=$ANDROID_NDK

echo $INSTALL_DIR
echo $SRC_DIR

cd $SRC_DIR

export PATH="$NDK_ROOT/toolchains/arm-linux-androideabi-4.4.3/prebuilt/linux-x86/bin/:$PATH"
export SYS_ROOT="$NDK_ROOT/platforms/android-8/arch-arm/"
export CC="arm-linux-androideabi-gcc --sysroot=$SYS_ROOT"
export LD="arm-linux-androideabi-ld"
export AR="arm-linux-androideabi-ar"
export RANLIB="arm-linux-androideabi-ranlib"
export STRIP="arm-linux-androideabi-strip"

mkdir -p $INSTALL_DIR
./configure --host=arm-eabi --build=x86-pc-linux-gnu --prefix=$INSTALL_DIR LIBS="-lc -lgcc"

make
make install

私のAndroidプロジェクトのjniのディレクトリツリー

ls -R
.:
Android.mk  Application.mk  fftw3  wavfile

./fftw3:
Android.mk  bin  include  lib  share

./fftw3/bin:
fftw-wisdom  fftw-wisdom-to-conf

./fftw3/include:
fftw3.f  fftw3.f03  fftw3.h  fftw3l.f03  fftw3q.f03

./fftw3/lib:
libfftw3.a  libfftw3.la  pkgconfig

./fftw3/lib/pkgconfig:
fftw3.pc

./fftw3/share:
info  man

./fftw3/share/info:
dir  fftw3.info  fftw3.info-1  fftw3.info-2

./fftw3/share/man:
man1

./fftw3/share/man/man1:
fftw-wisdom.1  fftw-wisdom-to-conf.1

./wavfile:
Android.mk  wavfile.cpp  wavfile.h

jni/Android.mk

include $(call all-subdir-makefiles)

jni/wavfile/Android.mk (.cpp と .h を自分で書いた wavfile)

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := wavfile
LOCAL_SRC_FILES := wavfile.cpp
include $(BUILD_SHARED_LIBRARY)

jni/fftw3/Android.mk

LOCAL_PATH := $(call my-dir)
include $(CLEAR_VARS)
LOCAL_MODULE := fftw3
LOCAL_SRC_FILES := lib/libfftw3.a
LOCAL_EXPORT_C_INCLUDES := include
include $(PREBUILT_STATIC_LIBRARY)

jni/アプリケーション.mk

APP_STL:=gnustl_static

ndk-build の出力

Compile++ thumb  : wavfile <= wavfile.cpp
Prebuilt       : libgnustl_static.a <= <NDK>/sources/cxx-stl/gnu-libstdc++/libs/armeabi/
SharedLibrary  : libwavfile.so
Install        : libwavfile.so => libs/armeabi/libwavfile.so

fftw3については何もありません。

ndkのドキュメントによると

A prebuilt module does not build anything. However, a copy of your prebuilt
shared library will be copied into $PROJECT/obj/local, and another will be
copied and stripped into $PROJECT/libs/<abi>.

fftw3 ライブラリはありません。なにが問題ですか?

ありがとうございました。

.

4

1 に答える 1

1

fft3 静的ライブラリがあります。あなたはそれらをそのままリストしました。下です。

./fftw3/lib:
libfftw3.a  libfftw3.la  pkgconfig

ルートの Android.mk ファイルで ndk-build を実行すると、共有ライブラリlibwavfile.soが作成され、libfftw3.la内に埋め込む必要がありますlibwavfile.so。Java ファイルに をロードまたはインクルードしlibwavfile.so、fftw3 ライブラリの API と で定義した API の使用を開始しますwavfile.cpp

それが役立つことを願っています。

于 2013-09-17T22:20:17.110 に答える