编译参考了开发的猫 这位同学的编译教程

前置环境:
操作系统: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

编译成功
屏幕截图 2022-04-15 012650