ffmpefg arm64库文件源码编译

因android studio工程需要,需要编译ffmpeg64位的so库,参考了很多文档总是出错,最后终于成功,使用的环境是centos7,需要安装gcc,ndk的版本是android-ndk-r14b-linux-x86_64,ffmpeg的版本是ffmpeg-3.2.9,之前编译过ffmpeg3.4.1,64位一直没成功且总出错,最后终于成功。请参考以下说明。


1、文件下载按上面的说明下载需要的源码文件

2、配置系统环境变量,在/etc/profile的末尾添加

NDKROOT=/home/suirui/android-ndk-r14b
export PATH=$NDKROOT:$PATH
添加完成后,执行source /etc/profile立即生效

3、在解压后的ffmpeg的源码路径下,找到configure文件,将以下几行替换

SLIBNAME_WITH_MAJOR='$(SLIBNAME).$(LIBMAJOR)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_VERSION)'
SLIB_INSTALL_LINKS='$(SLIBNAME_WITH_MAJOR)$(SLIBNAME)'
替换为下面内容:
SLIBNAME_WITH_MAJOR='$(SLIBPREF)$(FULLNAME)-$(LIBMAJOR)$(SLIBSUF)'
LIB_INSTALL_EXTRA_CMD='$$(RANLIB)"$(LIBDIR)/$(LIBNAME)"'
SLIB_INSTALL_NAME='$(SLIBNAME_WITH_MAJOR)'
SLIB_INSTALL_LINKS='$(SLIBNAME)'
4、编写sh脚本,若使用64位arm,请直接copy下面文本,将编写好的sh脚本放在ffmpeg的根目录下,添加可执行权限
需要根据自己机器的实际情况,修改NDK、SYSROOT和TOOLCHAIN的路径,在指定的PREFIX下,创建sh中使用的路径,该例子中是在ffmpeg的根目录下创建android/arm64-v8a该文件夹
#!/bin/bash
NDK=/home/android-ndk-r14b
SYSROOT=$NDK/platforms/android-22/arch-arm64
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64
function build_one
{
./configure \
--prefix=$PREFIX \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffserver \
--enable-cross-compile \
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android- \
--target-os=linux \
--arch=aarch64 \
--sysroot=$SYSROOT
#--extra-cflags="-O3 -DANDROID -Dipv6mr_interface=ipv6mr_ifindex -fasm -Wno-psabi -fno-short-enums -fno-strict-aliasing" \
#--extra-ldflags="$ADDI_LDFLAGS"
}
CPU=arm64-v8a
PREFIX=$(pwd)/android/$CPU
ADDI_LDFLAGS="-Wl,-rpath-link=$PLATFORM/usr/lib -L$PLATFORM/usr/lib -nostdlib -lc -lm -ldl -llog"
build_one
make -j8
make install
5、如果之前执行make失败过,请先执行make uninstall和make clean
6、在ffmpeg目录下执行sh脚本,生成的so文件在创建的PREFIX(android/arm64-v8a)路径下
7、如果需要编译32位的话,需要改动几个地方
SYSROOT=$NDK/platforms/android-22/arch-arm64,改成SYSROOT=$NDK/platforms/android-22/arch-arm
TOOLCHAIN=$NDK/toolchains/aarch64-linux-android-4.9/prebuilt/linux-x86_64,改成arm-linux-androideabi-4.9/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
--cross-prefix=$TOOLCHAIN/bin/aarch64-linux-android-,改成--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi
--arch=aarch64 ,改成--arch=arm
CPU=arm64-v8a,改成CPU=arm
在ffmpeg的目录下创建android/arm文件夹,用于prefix输出文件
其他的不用修改,直接执行,生成的库文件在android/arm下
注意:此文档只编译成功了3.2.9版本,其他的版本没有试





猜你喜欢

转载自blog.csdn.net/sunshine2853/article/details/78863679