kompilaci fftw3 v android NdK

hlasů
7

hi Jsem nový android-NdK Zatím jsem pracoval se všemi ukázkové aplikace v Android NDK, teď se snažím do přístavu fftw3 knihovna v android, můžete plz navrhnout mi žádný návod na to.

Dík.

Položena 17/11/2010 v 07:05
zdroj uživatelem
V jiných jazycích...                            


5 odpovědí

hlasů
17

FFTW3 build systém využívá autotools, takže není možné použít přímo s Android NDK. Dobrý blog post zabývající se touto problematikou, je tady .

Myšlenka je vytvářet správné config.hsoubor offline a vytvářet Android Makefiles, které nahrazují ty chybějící běžně generované autotools.

Aby se dosáhlo modulární uspořádání pro různé nativní moduly můžete používat, doporučoval bych následující:

Ve svém nejvyšším jni/adresáři dát tyto dva soubory:

Application.mk:

    APP_OPTIM        := release
    APP_ABI          := armeabi armeabi-v7a
    APP_MODULES      := fftw3

Android.mk:

    TOP_DIR := $(call my-dir)
    include $(TOP_DIR)/fftw3/project/jni/Android.mk

Tímto způsobem můžete snadno přidat nový modul tím, že vytvoří jni/new_module_nameadresář a pak se přidá new_module_namedo APP_MODULESseznamu.

Pak vytvořte nový jni/fftw3adresář a dát další Application.mkzde:

Application.mk:

    APP_PROJECT_PATH := $(call my-dir)/project
    APP_MODULES      += fftw3
    APP_OPTIM        := release
    APP_ABI          := armeabi armeabi-v7a

Pak dal původní FFTW3 balíček pod jni/fftw3/project/jni.

V tomto okamžiku je nutné generovat config.h. To lze provést pomocí malého skript jako je tento .

Posledním krokem je vytvoření potřebného Android Makefile. V jni/fftw3/project/jnidát nahoru Android.mk:

    LOCAL_PATH := $(call my-dir)
    include $(CLEAR_VARS)

    include $(LOCAL_PATH)/api/sources.mk
    include $(LOCAL_PATH)/dft/sources.mk
    include $(LOCAL_PATH)/dft/scalar/sources.mk
    include $(LOCAL_PATH)/dft/scalar/codelets/sources.mk
    include $(LOCAL_PATH)/kernel/sources.mk
    include $(LOCAL_PATH)/rdft/sources.mk
    include $(LOCAL_PATH)/rdft/scalar/sources.mk
    include $(LOCAL_PATH)/rdft/scalar/r2cb/sources.mk
    include $(LOCAL_PATH)/rdft/scalar/r2cf/sources.mk
    include $(LOCAL_PATH)/rdft/scalar/r2r/sources.mk
    include $(LOCAL_PATH)/reodft/sources.mk

    LOCAL_MODULE := fftw3
    LOCAL_C_INCLUDES := $(LOCAL_PATH) \
        $(LOCAL_PATH)/api \
        $(LOCAL_PATH)/dft \
        $(LOCAL_PATH)/dft/scalar \
        $(LOCAL_PATH)/dft/scalar/codelets \
        $(LOCAL_PATH)/kernel \
        $(LOCAL_PATH)/rdft \
        $(LOCAL_PATH)/rdft/scalar \
        $(LOCAL_PATH)/rdft/scalar/r2cb \
        $(LOCAL_PATH)/rdft/scalar/r2cf \
        $(LOCAL_PATH)/rdft/scalar/r2r \
        $(LOCAL_PATH)/reodft

    # Use APP_OPTIM in Application.mk
    LOCAL_CFLAGS := -g

    include $(BUILD_SHARED_LIBRARY)

Frow této chvíle budete muset vytvořit všechny tyto sources.mksoubory. Například typická sources.mkvypadá takto:

rdft/sources.mk:

    sources = buffered2.c \
              buffered.c \
              <....>
              vrank-geq1.c \
              vrank-geq1-rdft2.c

    LOCAL_SRC_FILES += $(sources:%=rdft/%)

Volat ndk-buildskript v kořenovém adresáři aplikace a měli byste skončit s dvěma ready-to-use FFTW3 knihoven:

  • libs/armeabi-v7a/libfftw3.so
  • libs/armeabi/libfftw3.so
Odpovězeno 05/09/2011 v 14:18
zdroj uživatelem

hlasů
1

Poté, co si všiml, že tam je tuna nových adresářů v nedávné FFTW verzi, která obsahuje .c a které nejsou uvedeny v původním Android.mk, jsem příliš líný psát source.mk vytvářející scénář a googled toto místo:

include $(LOCAL_PATH)/api/sources.mk

Díky Sudhakar Fomra (sfomra na GitHub), dostal můj build provést během několika minut.

https://github.com/sfomra/FFTW3_MOD-for-Android

Odpovězeno 06/01/2014 v 13:16
zdroj uživatelem

hlasů
1

I v současné době řeší podobný problém, ale bez výraznějších výsledků.

Mohu doporučit používání prašník osvědčený knihovnu jako JTransforms (Java docela rychle), nebo najít Badlogic realizaci KissFFT (JNI, asi 2 krát rychlejší, numerické nestabilní).

Odpovězeno 03/05/2011 v 19:45
zdroj uživatelem

hlasů
0

Zcela bezbolestně, FFTW lze postavit pro Android s jeho oficiálním cmake skriptu http://fftw.org/fftw-3.3.8.tar.gz :

externalNativeBuild {
    cmake {
        arguments "-DANDROID_ARM_NEON=TRUE"
        arguments "-DCMAKE_BUILD_TYPE=Release"
        arguments "-DBUILD_SHARED_LIBS=OFF"
        arguments "-DBUILD_TESTS=OFF"
        arguments "-DDISABLE_FORTRAN=ON"
        arguments "-DENABLE_FLOAT=ON"
        targets "fftw3f"
    }
}
Odpovězeno 12/02/2019 v 15:19
zdroj uživatelem

hlasů
0

Nejlepším způsobem, jak sestavit fftw3 pro Android armeabi-v7a je:

export SYSROOT="$NDK_ROOT/platforms/$TARGET/arch-arm"
export CFLAGS="-I$NDK_ROOT/platforms/$TARGET/arch-arm/usr/include --sysroot=$SYSROOT"
export CPPFLAGS="-I$NDK_ROOT/platforms/$TARGET/arch-arm/usr/include --sysroot=$SYSROOT"
export CC=$($NDK_ROOT/ndk-which gcc)
export LD=$($NDK_ROOT/ndk-which ld)
export CPP=$($NDK_ROOT/ndk-which cpp)
export CXX=$($NDK_ROOT/ndk-which g++)
export AS=$($NDK_ROOT/ndk-which as)
export AR=$($NDK_ROOT/ndk-which ar)
export RANLIB=$($NDK_ROOT/ndk-which ranlib)
./configure --host=arm-linux-androideabi --target=arm-linux-androideabi
make OS=android NDKROOT=$NDK_ROOT TARGET=android-9 ARCH=arm NDKLEVEL=9
Odpovězeno 21/08/2018 v 10:06
zdroj uživatelem

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more