返回「计算机、信息技术与工程」
架构和ABI相关知识
架构和ABI相关知识 架构指的是处理器或硬件的设计模型,决定了 CPU 如何处理指令和数据。在开发中,程序需要根据硬件架构进行编译,以生成适配特定硬件的二进制文件。
本文目录 9 个章节
架构和ABI相关知识
架构指的是处理器或硬件的设计模型,决定了 CPU 如何处理指令和数据。在开发中,程序需要根据硬件架构进行编译,以生成适配特定硬件的二进制文件。
常见的架构分类:
- ARM:主要用于移动设备,如 Android 手机。
- x86:主要用于桌面电脑和服务器。
- MIPS:曾在嵌入式设备中使用。
- RISC-V:新兴的开源架构,主要用于研究和开发。
什么是 ABI(Application Binary Interface)?
ABI 是应用程序的二进制接口,定义了编译后的程序如何与操作系统内核、库和其他程序交互。不同的 ABI 可能包括:
- 函数调用约定(如何传递参数、保存返回值)。
- 寄存器使用规则。
- 二进制格式(如 ELF 文件格式)。
- 内存对齐和数据类型布局。

Android 和 Linux 的 ABI 差异
Android 平台的 ABI
- Android 使用 ELF 文件格式:与 Linux 系统类似,Android 使用 ELF 格式的二进制文件(如
.so共享库)。 - C/C++ 标准库:Android 使用 libc++ 作为 C++ 标准库,并包含了 Android 专用的 Bionic 库。
- 支持的 ABI:
armeabi-v7aarm64-v8ax86x86_64
Linux 平台的 ABI
- GNU 工具链和库:Linux 使用 GNU glibc 作为标准 C 库,支持丰富的系统调用。
- 更广泛的架构支持:除了 ARM 和 x86,Linux 还支持一些特殊架构(如 MIPS、RISC-V)。
- 不同的库选项:支持不同的标准库,如 libstdc++ 和 musl。
Android工具链
1. 工具链:Clang/LLVM
- Android NDK 从 NDK r18 开始,官方 停止使用 GCC,并完全切换到 Clang/LLVM 编译器工具链。
- Clang 是 LLVM 项目的一部分,比 GCC 更快、更灵活,并且与 Android 平台有更好的集成。
- NDK 提供的
clang及相关工具会支持 C/C++ 标准,并提供对 Android ABI 的优化。
2. C/C++ 标准库:libc++(LLVM 实现)
- NDK 提供 libc++ 作为默认的 C++ 标准库,它是 LLVM 项目的 C++ 标准库实现。
- Android NDK 曾支持多个 C++ 标准库(如 GNU 的
libstdc++),但从 NDK r18 开始,libc++ 成为唯一支持的 C++ 标准库。
3. 链接器:lld 和 GNU ld
- Android NDK 主要使用 LLVM lld 作为默认链接器,具有更快的链接速度和更小的内存占用。
- NDK 也支持使用 GNU ld.bfd 或 ld.gold 链接器,但不再推荐。
4. 构建系统:CMake 和 Ninja
- Android NDK 提供了集成 CMake 和 Ninja 的构建支持。
- CMake 用于生成构建文件。
- Ninja 是一种高效的构建系统,用于并行构建。