64bitで動作するFFmpegの実行ファイルを作りたい場合、どのようにすればよろしいでしょうか?
http://writingminds.github.io/ffmpeg-android/
上記サイトを参考に下記のようなシェルを使ってFFmpegの実行ファイルを取得しました。
↓abi_settings.sh
#!/bin/bash . settings.sh BASEDIR=$2 case $1 in armeabi-v7a) NDK_ABI='arm' NDK_TOOLCHAIN_ABI='arm-linux-androideabi' NDK_CROSS_PREFIX="${NDK_TOOLCHAIN_ABI}" ;; x86) NDK_ABI='x86' NDK_TOOLCHAIN_ABI='x86' NDK_CROSS_PREFIX="i686-linux-android" CFLAGS="$CFLAGS -march=i686" ;; esac TOOLCHAIN_PREFIX=${BASEDIR}/toolchain-android if [ ! -d "$TOOLCHAIN_PREFIX" ]; then ${ANDROID_NDK_ROOT_PATH}/build/tools/make-standalone-toolchain.sh --toolchain=${NDK_TOOLCHAIN_ABI}-${NDK_TOOLCHAIN_ABI_VERSION} --platform=android-${ANDROID_API_VERSION} --install-dir=${TOOLCHAIN_PREFIX} fi CROSS_PREFIX=${TOOLCHAIN_PREFIX}/bin/${NDK_CROSS_PREFIX}- NDK_SYSROOT=${TOOLCHAIN_PREFIX}/sysroot export PKG_CONFIG_LIBDIR="${TOOLCHAIN_PREFIX}/lib/pkgconfig" if [ $3 == 1 ]; then export CC="${CROSS_PREFIX}gcc --sysroot=${NDK_SYSROOT}" export LD="${CROSS_PREFIX}ld" export RANLIB="${CROSS_PREFIX}ranlib" export STRIP="${CROSS_PREFIX}strip" export READELF="${CROSS_PREFIX}readelf" export OBJDUMP="${CROSS_PREFIX}objdump" export ADDR2LINE="${CROSS_PREFIX}addr2line" export AR="${CROSS_PREFIX}ar" export AS="${CROSS_PREFIX}as" export CXX="${CROSS_PREFIX}g++" export OBJCOPY="${CROSS_PREFIX}objcopy" export ELFEDIT="${CROSS_PREFIX}elfedit" export CPP="${CROSS_PREFIX}cpp" export DWP="${CROSS_PREFIX}dwp" export GCONV="${CROSS_PREFIX}gconv" export GDP="${CROSS_PREFIX}gdb" export GPROF="${CROSS_PREFIX}gprof" export NM="${CROSS_PREFIX}nm" export SIZE="${CROSS_PREFIX}size" export STRINGS="${CROSS_PREFIX}strings" fi
↓ffmpeg_build.sh
#!/bin/bash . abi_settings.sh $1 $2 $3 pushd ffmpeg case $1 in armeabi-v7a | armeabi-v7a-neon) CPU='cortex-a8' ;; x86) CPU='i686' ;; esac make clean ./configure \ --target-os="$TARGET_OS" \ --cross-prefix="$CROSS_PREFIX" \ --arch="$NDK_ABI" \ --cpu="$CPU" \ --enable-runtime-cpudetect \ --sysroot="$NDK_SYSROOT" \ --enable-pic \ --pkg-config="${2}/ffmpeg-pkg-config" \ --prefix="${2}/build/${1}" \ --extra-cflags="-I${TOOLCHAIN_PREFIX}/include $CFLAGS" \ --extra-ldflags="-L${TOOLCHAIN_PREFIX}/lib $LDFLAGS" \ --extra-libs="-lpng -lexpat -lm" \ --disable-asm \ --cc="gcc -m64" \ --extra-cxxflags="$CXX_FLAGS" || exit 1 make -j${NUMBER_OF_CORES} && make install || exit 1 popd
取得した実行ファイルをAndroid端末に入れて実際に動作させようとしたところ、CPUが32bitの端末では動作するものの64bitの端末だと「sh: ./ffmpeg: not executable: 32-bit ELF file」とエラーが表示されて実行することができませんでした。
そのため64bit端末用にも別途ビルドが必要だと考え、アーキテクチャの振り分けに下記のようなものを加えて実行してみましたが、「checking host system type... Invalid configuration aarch64-linux-android': machine
aarch64' not recognized」
「configure: error: /bin/bash conftools/config.sub aarch64-linux-android failed」
と表示されて動きませんでした。
↓abi_settings.sh
~ arm64) NDK_ABI='arm64' NDK_TOOLCHAIN_ABI='aarch64-linux-android' NDK_CROSS_PREFIX="${NDK_TOOLCHAIN_ABI}" ;; ~
↓ffmpeg_build.sh
~ arm64) CPU='cortex-a53' ;; ~
どこか設定などに間違い・不足などがありますでしょうか?
あなたの回答
tips
プレビュー