编译参考了开发的猫 这位同学的编译教程
前置环境:
操作系统:windows 11
minGW:llvm-mingw-20220323-msvcrt-x86_64
msys:msys2-x86_64-20220319.exe
ndk:24.0.8215888
llvm:ndk 自带
clang: ndk 自带
yasm
git
msys 安装缺少工具: pacman -S <pkgname>
编译工具链地址:C:\Users\ZhenqianXu\AppData\Local\Android\Sdk\ndk\24.0.8215888\toolchains\llvm\prebuilt\windows-x86_64\bin
交叉编译工具链地址:C:\Users\ZhenqianXu\AppData\Local\Android\Sdk\ndk\24.0.8215888\toolchains\llvm\prebuilt\windows-x86_64\sysroot
找到编译目标 Android 版本 29 需要的 clang 和 clang++ 文件
1
2
3
4
"C:\Users\ZhenqianXu\AppData\Local\Android\Sdk\ndk\24.0.8215888\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi29-clang"
"C:\Users\ZhenqianXu\AppData\Local\Android\Sdk\ndk\24.0.8215888\toolchains\llvm\prebuilt\windows-x86_64\bin\armv7a-linux-androideabi29-clang++"
进入 configure
文件中,找到 CMDLINE_SET,在其中添加一个变量
cross-prefix-clang
然后就找到 cc_default
, cxx_default
这两个变量定义的地方,修改为
1
2
3
4
5
6# clang set
cc_default="${cross_prefix_clang}${cc_default}" cxx_default="${cross_prefix_clang}${cxx_default}"
# 也可以直接改成下面的,这两个变量就是对应上面clang和clang++编译器路径
cc_default="${cross_prefix_clang}clang"
cxx_default="${cross_prefix_clang}clang++"
新建编译脚本:
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
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/bin/bash
set -x
# 目标Android版本
API=29
CPU=armv7-a
#so库输出目录
OUTPUT=/c/Users/XZQ/Desktop/FFmpeg/ffmpeg-4.2.2/android/$CPU
# NDK的路径,根据自己的NDK位置进行设置
NDK=/c/Users/XZQ/AppData/Local/Android/Sdk/ndk/24.0.8215888
# 编译工具链路径
TOOLCHAIN=$NDK/toolchains/llvm/prebuilt/windows-x86_64
# 编译环境
SYSROOT=$TOOLCHAIN/sysroot
function build
{
./configure \
--prefix=$OUTPUT \
--target-os=android \
--arch=arm \
--cpu=armv7-a \
--enable-asm \
--enable-neon \
--enable-cross-compile \
--enable-shared \
--disable-static \
--disable-doc \
--disable-ffplay \
--disable-ffprobe \
--disable-symver \
--disable-ffmpeg \
//禁掉strip优化,避免了找不到strip工具报错
--disable-stripping \
--sysroot=$SYSROOT \
--cross-prefix=$TOOLCHAIN/bin/arm-linux-androideabi- \
--cross-prefix-clang=$TOOLCHAIN/bin/armv7a-linux-androideabi$API- \
--extra-cflags="-fPIC"
make clean all
# 这里是定义用几个线程编译
make -j12
make install
}
build
在 msys 中运行该脚本:
./build_android_clang.sh
编译成功