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。
感谢您的宝贵时间。
帕拉克
这是我为 x86
和 arm
构建的脚本。似乎我使用的脚本与您尝试用作基础的脚本相同。如果您只需要 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=
我正在关注这个: 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。
感谢您的宝贵时间。
帕拉克
这是我为 x86
和 arm
构建的脚本。似乎我使用的脚本与您尝试用作基础的脚本相同。如果您只需要 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=