update 2018:
生成工具链
# NDK version = 14
# cd $NDK_DIR
INSTALL_DIR=/home/konga/bin
ARM_TOOLCHAIN="arm-linux-androideabi-4.9"
ARM64_TOOLCHAIN="aarch64-linux-android-4.9"
make_toolchain_from_ndk()
{
rm -fr $INSTALL_DIR/$ARM_TOOLCHAIN
build/tools/make-standalone-toolchain.sh --arch=arm --platform=android-21 --install-dir=$INSTALL_DIR/$ARM_TOOLCHAIN
rm -fr $INSTALL_DIR/$ARM64_TOOLCHAIN
build/tools/make-standalone-toolchain.sh --arch=arm64 --platform=android-21 --install-dir=$INSTALL_DIR/$ARM64_TOOLCHAIN
$INSTALL_DIR/$ARM_TOOLCHAIN/bin/${ARM_TOOLCHAIN%-*}-gcc --version
echo
$INSTALL_DIR/$ARM64_TOOLCHAIN/bin/${ARM64_TOOLCHAIN%-*}-gcc --version
}
make_toolchain_from_ndk
编译脚本:
TOOL_LIST="arm-linux-androideabi-4.9 aarch64-linux-android-4.9"
#TOOL_LIST="aarch64-linux-android-4.9"
for TOOLCHAIN in $TOOL_LIST ; do
TOOL_HOME=/home/konga/bin/$TOOLCHAIN
CROSS_PREFIX=$TOOL_HOME/bin/${TOOLCHAIN%-*}-
if [ $TOOLCHAIN == "arm-linux-androideabi-4.9" ] ; then
ARCH=arm
INSTALL_DIR=./out/armeabi-v7a
EXTRA_CFLAGS="-march=armv7-a"
LIBGCC=$TOOL_HOME/lib/gcc/arm-linux-androideabi/4.9.x/libgcc.a
elif [ $TOOLCHAIN == "aarch64-linux-android-4.9" ] ; then
ARCH=arm64
INSTALL_DIR=./out/arm64-v8a
EXTRA_CFLAGS="-march=armv8-a"
LIBGCC=$TOOL_HOME/lib/gcc/aarch64-linux-android/4.9.x/libgcc.a
fi
./configure --enable-cross-compile --target-os=linux \
--arch=$ARCH --cross-prefix=$CROSS_PREFIX \
--extra-cflags=$EXTRA_CFLAGS \
--disable-linux-perf \
--disable-programs --disable-doc --disable-debug \
--prefix=$INSTALL_DIR
make clean;
make V=1 -j8 && make install;
SYSROOT=$TOOL_HOME/sysroot
${CROSS_PREFIX}ld \
-rpath-link=$SYSROOT/usr/lib \
-L$SYSROOT/usr/lib \
-L$INSTALL_DIR/lib \
-soname libffmpeg.so -shared -nostdlib -Bsymbolic --whole-archive --no-undefined -o \
$INSTALL_DIR/libffmpeg.so \
$INSTALL_DIR/lib/libavcodec.a \
$INSTALL_DIR/lib/libavfilter.a \
$INSTALL_DIR/lib/libswresample.a \
$INSTALL_DIR/lib/libavformat.a \
$INSTALL_DIR/lib/libavutil.a \
$INSTALL_DIR/lib/libswscale.a \
-lc -lm -lz -ldl -llog --dynamic-linker=/system/bin/linker \
$LIBGCC
done