前期准备
- 下载 Android-NDK
- 下载 FFmpeg 源码 注意:笔者用的是
NDK-21
和ffmpeg-4.4
进行编译,如果版本不同可能会有所不同。
测试:mac 与 ubuntu 下的NDK20 - NDK22
和ffmpeg 4.0 - ffmpeg 4.4
,均可使用。
本文你可以了解到
- NDK20 - NDK22 提供的交叉编译工具链主要目录
- 使用
clang
交叉编译出 Android 平台可以使用的 libffmpeg.so 库 - 部分编译细节
一、NDK 提供的交叉编译工具链主要目录与文件
从 NDK20 - NDK22 编译工具链目录结构基本没变,这里以 NDK21 作为演示( NDK 在 windows、linux、mac 中的目录基本一样)
如上图,主要用的就是这几个目录,其中编译 FFmpeg 需要用到的 gcc
库就在 aarch64、arm、x86_64、x86
这几个文件夹中,这里先介绍一下这几个名字在 Android 中的不同平台库的联系。
aarch64:带这个前缀的目录都是与 arm64-v8a 库相关
arm:带这个前缀的目录都是与 armeabi-v7a 库相关
x86_64:带这个前缀的目录都是与 x86_64 库相关
x86:带这个前缀的目录都是与 x86 库相关
1.clang 编译工具
进入目录 llvm->prebuilt->darwin-x86_64->bin
里面都是与交叉编译相关的文件,我们以 clang
进行编译,所以主要关注的是以 clang、clang++
结尾的文件,clang
用于编译 c 文件
、clang++
用于编译 c++
文件。
- 这里需要注意的是:
21 和 i686
- 21:表示编译出的库支持的最低 Android 版本
- i686:表示编译出 x86 库平台的编译工具
上面的 NDK 目录名在各系统上的对应形式:
mac:darwin-x86_64
linux:linux-x86_64
windows:windows-x86_64
注意:下面都以 mac 系统下的 NDK 目录进行介绍
2.编译环境,需要用到的库
库和头文件所在的目录在 darwin-x86_64
下的 sysroot
目录,其中头文件在 include
目录,库在 lib
目录,了解完这些,就可以开始编译了。
二、使用 clang<