android-ndk开发(8): ndk 和 clang 版本对照表
android-ndk开发(8): ndk 和 clang 版本对照表
2025/05/06
1. 概要
android-ndk 是基于 clang 的编译工具链。 当 clang 自身的版本变更导致了普通用户的编译、链接报错时, 用户可能只关注到了 ndk 版本, 导致问题的分析浮于表面。
android-ndk 官方 changelog 中也提及了 clang 相关的变更, 但, 细节太多。
本文整理一个表格, 并给出确定表格的方法。
2. android-ndk changelog
android-ndk 的 wiki 上存放了各个版本的 changelog, 比如:
https://github.com/android/ndk/wiki/Changelog-r19
https://github.com/android/ndk/wiki/Changelog-r21
https://github.com/android/ndk/wiki/Changelog-r26
这些 changelog 分散在不同的网页中, 每次查看有点麻烦。 可以克隆 ndk 源码仓库来统一查看:
git clone https://android.googlesource.com/platform/ndk.git
在 ndk/docs/changelogs 目录存放了最近11个版本的changelog:
PS D:\github\ndk> dir docs/changelogs目录: D:\github\ndk\docs\changelogsMode LastWriteTime Length Name
---- ------------- ------ ----
-a---- 2025/5/6 15:31 9844 Changelog-r19.md
-a---- 2025/5/6 15:31 5308 Changelog-r20.md
-a---- 2025/5/6 15:31 14294 Changelog-r21.md
-a---- 2025/5/6 15:31 8834 Changelog-r22.md
-a---- 2025/5/6 15:31 11925 Changelog-r23.md
-a---- 2025/5/6 15:31 7834 Changelog-r24.md
-a---- 2025/5/6 15:31 6603 Changelog-r25.md
-a---- 2025/5/6 15:31 9159 Changelog-r26.md
-a---- 2025/5/6 15:31 7758 Changelog-r27.md
-a---- 2025/5/6 15:31 4124 Changelog-r28.md
-a---- 2025/5/6 15:31 1387 Changelog-r29.md
-a---- 2025/5/6 15:31 532 Changelog-r30.md
例如 ndk-r26 的 changelog 提到, 后续会直接使用上游的 libc++ 更新, 不会再显式提及 libc++ 更新。
The NDK’s libc++ now comes directly from our LLVM
toolchain, so every future LLVM update is also a libc++ update. Future
changelogs will not explicitly mention libc++ updates.
3. ndk 和 clang 版本对照表
<ndk-目录>/source.properties
, 如 ndk-r21e:
Pkg.Desc = Android NDK
Pkg.Revision = 21.4.7075529
查看 NDK 对应的 clang 版本:
win: D:/soft/android-ndk/r21e/toolchains/llvm/prebuilt/windows-x86_64/bin/clang++ --version
linux: ~/soft/android-ndk/r23c/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++ --version
ndk | ndk | Clang |
---|---|---|
r28b | 28.1.13356709 | 19.0.0 |
r27c | 27.2.12479018 | 18.0.3 |
r26d | 26.3.11579264 | 17.0.2 |
r25c | 25.2.9519653 | 14.0.7 |
r25b | 25.1.8937393 | 14.0.6 |
r24 | 24.0.8215888 | 14.0.1 |
r23c | 23.2.8568313 | 12.0.9 |
r22b | 22.1.7171670 | 11.0.5 |
r21e | 21.4.7075529 | 9.0.9 |
r21b | 21.1.6352462 | 9.0.8 |
r20b | 20.1.5948944 | 8.0.7 |
r19c | 19.2.5345600 | 8.0.2 |
r18b | 18.1.5063045 | 7.0.2 |
这个表格, 在后续分析 __aarch64_swp4_acq_rel
符号找不到问题时起到作用。
4. 总结
本文给出了查阅 ndk 各个版本 changelog 的方法, 包括 wiki 网站, 和 ndk 源码仓库, 这些 changelog 提供了比较详细的信息。 本文还给出了 ndk 和 clang 版本的对照表, 包括 ndk 字母形式的短版本、 纯数字的版本, 而对应的 clang 版本,则能用于和上游 LLVM 的版本变更做联动的分析。