15AH, San Francisco

California, United States.

Send Your Mail At:

tianyingkejishe@sina.cn

Working Hours

Mon-Sat: 9.30am To 7.00pm

【ffmpeg】三、linux编译ffmpeg.so多架构编译【f

前言:在前两章已经介绍了,如何进行编译ffmpeg.so的一个完整过程。但是都是基于一个架构编译的,本文介绍一个sh脚本同时编译出双架构的方法,使编译过程更加方便和高效。

目前android端常用的架构有两个:

arm64-v8a:包含32位和64位执行状态

armeabi-v7a:只包含32位执行状态。

一、编写脚本

在前几篇文章中的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属性进行功能模块的配置。

anyShare分享到:
本站的文章和资源来自互联网或者站长的原创,按照 CC BY -NC -SA 3.0 CN协议发布和共享,转载或引用本站文章应遵循相同协议。如果有侵犯版权的资源请尽快联系站长,我们会在24h内删除有争议的资源。欢迎大家多多交流,期待共同学习进步。
stormwind