前言:在前两章已经介绍了,如何进行编译ffmpeg.so的一个完整过程。但是都是基于一个架构编译的,本文介绍一个sh脚本同时编译出双架构的方法,使编译过程更加方便和高效。
目前android端常用的架构有两个:
arm64-v8a:包含32位和64位执行状态
armeabi-v7a:只包含32位执行状态。
ffmpeg专辑(一):linux编译ffmpeg.so入门
ffmpeg专辑(二):linux编译ffmpeg.so脚本改良与裁编
ffmpeg专辑(三):linux编译ffmpeg.so多架构编译
ffmpeg专辑(四):linux编译ffmpeg.so合并so篇
一、编写脚本
在前几篇文章中的ffmpeg-4.2.2源码目录下新建一个编译脚本:build_android_v8v7.sh:
#!/bin/bash
make clean
#变量定义,变量前面的export可要可不要,如export API
API=21
NDK=/home/liuzihui/softwaresCus/ndkr21/android-ndk-r21e
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/linux-x86_64
SYSROOT=$TOOLCHAIN/sysroot
ADDITIONAL_CONFIGURE_FLAG="--enable-avdevice --enable-avcodec --enable-avformat --enable-swresample --enable-swscale --enable-postproc --enable-avfilter"
function build_android {
echo "===========================1========================"
./configure \
--prefix=$OUTPUT \
--target-os=android \
--arch=$ARCH \
--cpu=$CPU \
--enable-asm \
--enable-neon \
--enable-cross-compile \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-ffmpeg \
--sysroot=$SYSROOT \
--cross-prefix=$CROSS_PREFIX \
--cc=$CC \
--cxx=$CXX \
--extra-cflags="-fPIC" \
$ADDITIONAL_CONFIGURE_FLAG
echo "===========================2====================="
make clean
echo "=============================${CC}==============="
make -j4
make install
}
#arm64-v8a
ARCH=arm64
CPU=armv8-a
OUTPUT=/home/liuzihui/softwaresCus/ffmpegSource/ffmpeg-4.2.2/android/$CPU
CROSS_PREFIX=$TOOLCHAIN/bin/aarch64-linux-android- #AR AS LD等通用
CC=$TOOLCHAIN/bin/aarch64-linux-android$API-clang #CC单独指定,非通用(因为ndk中CC与AR路径不同,后同理)
CXX=$TOOLCHAIN/bin/aarch64-linux-android$API-clang++ #CXX单独指定,非通用
build_android
#armeabi-v7a
ARCH=arm
CPU=armv7-a
OUTPUT=/home/liuzihui/softwaresCus/ffmpegSource/ffmpeg-4.2.2/android/$CPU
CROSS_PREFIX=$TOOLCHAIN/bin/arm-linux-androideabi- #AR AS LD等通用
CC=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang #CC单独指定,非通用
CXX=$TOOLCHAIN/bin/armv7a-linux-androideabi$API-clang++ #CXX单独指定,非通用
build_android
二、执行脚本
在前几篇文章中的ffmpeg-4.2.2源码目录下,终端命令:赋予脚本权限和执行脚本:
chmod +x build_android_v8v7.sh
./build_android_v8v7.sh
等待几分钟,然后会在ffmpeg-4.2.2源码目录下自动生成android目录和里面的内容:
后记:本次编译没有使用so的裁剪(上一篇已经讲过),使用生成默认的全量包(即生成了7个so)的方式编译的,后面的文章将讲述如何合并这7个so文件。
注意:若想自行裁剪,可以参照上一章介绍,修改本次脚本中的自定义变量 ADDITIONAL_CONFIGURE_FLAG 里面的一些enable和disable属性进行功能模块的配置。
好了,本次专辑(三)就讲到这里了,更多内容,请期待下次的讲述
欢迎有问题的伙伴及时留意讨论,有不足之处还望指正
祝大家生活工作愉快~
转自:
https://blog.csdn.net/minping9101/article/details/131745057