Mac下如何编译 FFmpeg的SO库,为Android使用

花了一整天的时间,终于编译通过了。 最大的问题,就是ndk的版本和ffmpeg的版本要对应上,尝试过master,release/3.4, release/3.3, release/3.2, release/3.1,ndk-bundle, ndk-r10e各种交配,错误也是各种样式。不要去关注,stdlib.h找不到,文件not executable,macro找不到,和你没关系。

  1. ffmpeg的下载
    github.com/FFmpeg/FFmp…
    下载好版本切到release/3.1
  2. 修改configure文件
SLIBNAME_WITH_VERSION='$(SLIBNAME).$(LIBVERSION)'
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'  
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'  
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'  
SLIB_INSTALL_LINKS='$(SLIBNAME)'

复制代码
  1. 下载ndk-r10e
    stackoverflow.com/questions/6…

  2. 在ffmpeg目录下编写编译脚本文件build_android.sh

#!/bin/bash
NDK=/Users/yangjing/Library/android-ndk-r10e
SYSROOT=$NDK/platforms/android-21/arch-arm/
TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/darwin-x86_64
function build_one(){
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--target-os=linux \
--arch=arm \
--sysroot=$SYSROOT \
--extra-cflags="-Os -fpic $ADDI_CFLAGS" \
--extra-ldflags="$ADDI_LDFLAGS" \
$ADDITIONAL_CONFIGURE_FLAG
}
CPU=arm
PREFIX=$(pwd)/android/$CPU
ADDI_CFLAGS="-marm"
build_one
make
make install
复制代码
  1. 运行./build_android.sh,
    可能需要权限chmod 777 build_android.sh
  2. so会在ffmpeg目录下生成,位于android/arm/*

你可能感兴趣的:(Mac下如何编译 FFmpeg的SO库,为Android使用)