Android Ndk 和 FFMPEG - 无法在 ubuntu x86 上编译

Android Ndk & FFMPEG - Not able to compile on ubuntu x86

我正在关注这个: roman10's android ndk r9d - ffmpeg tutorial 我可以 运行 build_android.sh 脚本..但它不会在我的 source/ffmpeg 文件夹中创建那个“android”文件夹!! 我应该怎么办?请帮助我。

又一个疑惑:那个.sh文件里的‘arm’应该是根据机器环境改的????如果是这样的话,你能为我们指导 x86 吗???

我的 build_android.sh 文件:

#!/bin/bash
NDK=/home/NDK/android-ndk-r9d
SYSROOT=$NDK/platforms/android-19/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.8/prebuilt/linux-arm
function build_one
{
sudo ./configure \
    --target-os=linux \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make
make install
}
CPU=i686
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm"
build_one

我正在使用 Ndk r10,ffmpeg 2.5.4,ubuntu x86。

感谢您的宝贵时间。

帕拉克

这是我为 x86arm 构建的脚本。似乎我使用的脚本与您尝试用作基础的脚本相同。如果您只需要 x86,则在脚本底部注释第一个 build_one

已在 Mac 上使用 NDK r10 进行了测试,但应该也可以在 Ubuntu 上使用。

#!/bin/bash

NDK_PLATFORM_LEVEL=9
NDK_COMPILER_VERSION=4.8
NDK_ABI=arm

# Android now has 64-bit and 32-bit versions of the NDK for GNU/Linux.  We
# assume that the build platform uses the appropriate version, otherwise the
# user building this will have to manually set NDK_PROCESSOR or NDK_TOOLCHAIN.
if [ $(uname -m) = "x86_64" ]; then
    NDK_PROCESSOR=x86_64
else
    NDK_PROCESSOR=x86
fi

NDK_UNAME=`uname -s | tr '[A-Z]' '[a-z]'`


NDK=$ANDROID_NDK_ROOT

function build_one
{
    if [ $NDK_ABI = "x86" ]; then
        HOST=i686-linux-android
        NDK_TOOLCHAIN=$NDK_ABI-$NDK_COMPILER_VERSION
    else
        HOST=$NDK_ABI-linux-androideabi
        NDK_TOOLCHAIN=$HOST-$NDK_COMPILER_VERSION
    fi

    SYSROOT=$NDK/platforms/android-$NDK_PLATFORM_LEVEL/arch-$NDK_ABI/
    TOOLCHAIN=$NDK/toolchains/$NDK_TOOLCHAIN/prebuilt/$NDK_UNAME-$NDK_PROCESSOR
    echo sysroot=$SYSROOT
    echo prefix=$PREFIX

make distclean > /dev/null 2>&1

./configure \
    --prefix=$PREFIX \
    --enable-shared \
    --disable-debug \
    --disable-stripping \
    --disable-static \
    --disable-doc \
    --disable-ffmpeg \
    --disable-ffplay \
    --disable-ffprobe \
    --disable-ffserver \
    --disable-avdevice \
    --disable-doc \
    --disable-symver \
    --cross-prefix=$TOOLCHAIN/bin/$HOST- \
    --target-os=linux \
    --arch=arm \
    --enable-cross-compile \
    --sysroot=$SYSROOT \
    --enable-pic \
    --extra-cflags="-Os -fpic $ADDI_CFLAGS" \
    --extra-ldflags="$ADDI_LDFLAGS" \
    $ADDITIONAL_CONFIGURE_FLAG
make clean
make -j16
make install
}

CPU=arm
PREFIX=$(pwd)/android/$CPU 
ADDI_CFLAGS="-marm" 
ADDITIONAL_CONFIGURE_FLAG="--cpu=cortex-a8"
build_one

NDK_ABI=x86
CPU=i686
PREFIX=$(pwd)/android/x86
ADDI_CFLAGS="-pipe -march=atom -msse3 -ffast-math -mfpmath=sse"
ADDI_LDFLAGS="-lm -lz -Wl,--no-undefined -Wl,-z,noexecstack"
ADDITIONAL_CONFIGURE_FLAG="--arch=x86 --cpu=i686"

build_one

我也用这些替换了 configure 中以 SLIBNAME 开头的行。教程也提到了。

SLIBNAME='$(SLIBPREF)$(FULLNAME)$(SLIBSUF)'
SLIBNAME_WITH_VERSION='$(SLIBNAME)'
SLIBNAME_WITH_MAJOR='$(SLIBNAME)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB) "$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME)'
SLIB_INSTALL_LINKS=