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

时间:2015-02-17 13:29:47

标签: android-ndk ffmpeg

我跟着这个: roman10's android ndk r9d - ffmpeg tutorial 我能够运行build_android.sh脚本..但它没有在我的source / ffmpeg文件夹中创建'android'文件夹! 我该怎么办? Plz帮助我。

另一个疑问:该.sh文件中的'arm'应该根据机器env改变?如果是这种情况,你可以指导我们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。

谢谢您的时间。

PALAK。

1 个答案:

答案 0 :(得分:1)

以下是我为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=