FFMPEG Build编译最小兼容版本 注意事项



FFMPEG 最小兼容版本 注意事项


1 . 最小兼容版本 : 在 Ubuntu 中编译 FFMPEG 时 , 需要指定头文件 与 NDK 的依赖库 , 这个 NDK 依赖库与头文件的 版本 , 是我们的最小兼容版本 ;


2 . 错误分析 : 下面的情况就是配置了错误的最小编译版本 , 排查了半天 , 找出了问题 ; 编译时指定了 21 版本的依赖库 , 但是 build.gradle 中指定了 15 版本的最小兼容版本 ;

  libavformat/hls.c:834: error: undefined reference to 'atof'
  libavformat/hlsproto.c:141: error: undefined reference to 'atof'
  libavcodec/v4l2_buffers.c:439: error: undefined reference to 'mmap64'
  clang++: error: linker command failed with exit code 1 (use -v to see invocation)
  ninja: build stopped: subcommand failed.

   
   
  • 1
  • 2
  • 3
  • 4
  • 5

3 . 交叉编译脚本 :【Android FFMPEG 开发】FFMPEG 交叉编译配置 ( 下载 | 配置脚本 | 输出路径 | 函数库配置 | 程序配置 | 组件配置 | 编码解码配置 | 交叉编译配置 | 最终脚本 ) 博客中 , 交叉编译 FFMPEG 库时 , 使用的编译脚本如下 :

#!/bin/bash

# NDK 根目录
NDK_ROOT=/root/NDK/android-ndk-r17c

# TOOLCHAIN 变量指向 gcc g++ 等交叉编译工具所在的目录
TOOLCHAIN=$NDK_ROOT/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64

# gcc 编译器参数
FLAGS="-isysroot N D K R O O T < / s p a n > / s y s r o o t − i s y s t e m < s p a n c l a s s = " t o k e n v a r i a b l e " > NDK_ROOT</span>/sysroot -isystem <span class="token variable"> NDKROOT</span>/sysrootisystem<spanclass="tokenvariable">NDK_ROOT/sysroot/usr/include/arm-linux-androideabi -isystem $NDK_ROOT/sources/android/support/include -D__ANDROID_API__=21 -g -DANDROID -ffunction-sections -funwind-tables -fstack-protector-strong -no-canonical-prefixes -march=armv7-a -mfloat-abi=softfp -mfpu=vfpv3-d16 -mthumb -Wa,–noexecstack -Wformat -Werror=format-security -O0 -fPIC"

# 编译结果输出路径
PREFIX=./android/armeabi-v7a

# 执行 configure 脚本生成 Makefile 构建脚本
./configure
–prefix=KaTeX parse error: Undefined control sequence: \ at position 15: PREFIX</span> \̲ ̲--enable-small …TOOLCHAIN/bin/arm-linux-androideabi-
–sysroot=KaTeX parse error: Undefined control sequence: \ at position 47: …id-21/arch-arm \̲ ̲--extra-cflags<…FLAGS"
–arch=arm
–target-os=android

# 清除之前的编译内容
make clean

# 开启新的 FFMPEG 编译
make install
————————————————
版权声明:本文为CSDN博主「韩曙亮」的原创文章,遵循 CC 4.0 BY-NC-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://hanshuliang.blog.csdn.net/article/details/104351312

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38

4 . 库文件 : 交叉编译需要的库文件就是上述 NDK platforms 目录下的 函数库 ;


5 . --sysroot 头文件与库文件查找目录设定 : 使用 --sysroot=XX 参数设置 ;

指定本次编译的 头文件 与 库文件 , 系统会自动到 XX/usr/include 目录下查找头文件 , 到 XX/usr/lib 目录下查找库文件 ;


6 . 配置依赖库路径 : 配置 android-21 版本 的 库 和 头文件路径 , –sysroot=$NDK_ROOT/platforms/android-21/arch-arm , 其版本是 Android 21 版本的库 , 那么 Android Studio 中只能配置 21 的最小兼容版本 , 如果小于 21 就会报错 ;

在这里插入图片描述

版权声明:本文为韩曙亮博主原创文章,此为转载副本,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/shulianghan/article/details/104419957/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值