常见系统ABI大全/主流系统ABI速查手册:跨平台CPU架构与二进制接口完全指南

ABI(Application Binary Interface,应用二进制接口)是连接编译后二进制程序与底层系统、CPU 架构的核心规范,决定了函数调用、参数传递、内存对齐、寄存器使用等底层行为。本文系统整理了 Windows、Linux、MacOS、iOS、Android 及嵌入式等主流操作系统的 ABI 类型,按平台与架构分类对比,清晰区分 ABI 与 API 的核心差异,帮助开发者理解跨平台二进制兼容性、库文件适配与程序移植的底层逻辑,是系统开发、跨平台编译与架构选型的实用参考。
一、核心概念:什么是 ABI?
ABI(Application Binary Interface,应用二进制接口) 是一套底层规范,定义了编译后的二进制程序与操作系统、CPU 之间的交互规则,包括:
- 函数调用约定(参数入栈顺序、寄存器使用)
- 内存对齐方式
- 系统调用号与接口
- 目标文件格式(如 ELF、PE、Mach-O)
- 数据类型大小与布局
关键结论:相同 ABI 的系统可直接运行彼此的二进制文件;不同 ABI 即使 CPU 架构相同,也无法直接兼容(需重新编译)。
二、按操作系统分类的常见 ABI 详解
1. Windows 系列
| 架构 | ABI 名称 | 位数 | 说明 |
|---|---|---|---|
| x86 | win32 / x86 | 32 位 | 传统桌面程序,使用 cdecl/stdcall 等调用约定,兼容老旧 32 位 Windows |
| x86_64 | x64 / amd64 | 64 位 | 现代 Windows 主流平台,使用 Microsoft x64 调用约定,支持大内存与 64 位指令集 |
| ARM (ARMv7) | arm / armv7 | 32 位 | 用于 Windows RT 或早期 ARM 设备(如 Surface RT),现已逐步淘汰 |
| ARM64 | aarch64 / arm64 | 64 位 | 新款 Windows on ARM 设备(如 Surface Pro X、Windows 11 ARM)主流架构 |
2. Linux 系列
| 架构 | ABI 名称 | 位数 | 说明 |
|---|---|---|---|
| x86 | i386 / x86 | 32 位 | 老版本 Linux 系统,遵循 System V ABI,兼容老旧 32 位 x86 设备 |
| x86_64 | x86_64 / amd64 | 64 位 | 主流 Linux 系统(Ubuntu、CentOS 等),遵循 System V AMD64 ABI |
| ARM (v6/v7) | armeabi / armeabi-v7a | 32 位 | 嵌入式、树莓派、旧款 Android 设备,使用 EABI(嵌入式 ABI)标准 |
| ARM64 | arm64 / aarch64 | 64 位 | 新款 ARM 设备(如 Apple M1 运行 Linux、ARM 服务器),主流 64 位 ARM ABI |
| MIPS | mips / mips64 | 32/64 位 | 已逐渐淘汰,部分路由器、旧嵌入式设备仍在使用 |
| RISC-V | riscv32 / riscv64 | 32/64 位 | 新兴开源架构,部分 Linux 发行版(如 Debian、Fedora)已支持 |
| PowerPC | ppc / ppc64 | 32/64 位 | 多用于高性能计算、老款 IBM 服务器,较冷门 |
| s390x | s390x | 64 位 | IBM 大型机架构,企业级 Linux(如 Red Hat Enterprise Linux for IBM Z)专用 |
📌 补充:Linux 上绝大多数 ABI 遵循 System V ABI 标准,保证同架构不同发行版的二进制兼容性。
3. macOS & iOS 系列(Apple 平台)
| 架构 | ABI 名称 | 位数 | 说明 |
|---|---|---|---|
| x86_64 | x86_64 | 64 位 | Intel 芯片 Mac(2006-2020 款)的标准 ABI,遵循 Mach-O 格式 |
| ARM64 | arm64 / aarch64 | 64 位 | Apple Silicon 芯片(M1/M2/M3 系列)专用,macOS 11+ 主流架构 |
| iOS 设备 | armv7 / arm64e | 32/64 位 | armv7 用于老款 iOS 设备(如 iPhone 5 及更早);arm64e 带指针验证(PAC)等安全扩展,现代 iOS 设备主流 |
📌 补充:Apple 平台使用 Mach-O 目标文件格式,结合定制化 ABI 实现,与 Linux/Windows 的 ELF/PE 格式不兼容。
4. Android 系统
| 架构 | ABI 名称 | 位数 | 说明 |
|---|---|---|---|
| ARMv7 | armeabi-v7a | 32 位 | 老款 Android 设备(2018 年前)主流,支持硬件浮点运算,兼容性强 |
| ARMv8 | arm64-v8a | 64 位 | 现代 Android 设备(90%+ 市场占比)主流,性能更强、支持更大内存 |
| x86 | x86 | 32 位 | 主要用于 Android 模拟器(如 Android Studio 内置模拟器),真实设备极少 |
| x86_64 | x86_64 | 64 位 | 64 位 Android 模拟器专用,适配现代 x86_64 开发环境 |
📌 补充:Android ABI 是 NDK 开发的核心概念,直接影响.so动态链接库的编译与加载,多 ABI 打包可提升兼容性。
5. 嵌入式 / 其他系统
三、按体系结构分类的 ABI 汇总
| 架构族 | 常见 ABI 名称 | 应用系统 |
|---|---|---|
| x86 | x86, i386, ia32 | Windows, Linux, DOS, ReactOS |
| x86_64 | x64, amd64, x86-64 | 所有现代主流系统(Windows 10+/Linux/macOS/Android 模拟器) |
| ARM | armv6, armv7-a, armeabi, armeabi-v7a | Android, Linux, 树莓派、旧款嵌入式设备 |
| ARM64 | aarch64, arm64-v8a | Android, iOS, Linux, macOS(Apple Silicon)、Windows on ARM |
| MIPS | mips, mipsel, mips64 | 路由器、旧 Linux 嵌入式系统、部分网络设备 |
| RISC-V | riscv32, riscv64 | 开源芯片生态、实验性 Linux 发行版、嵌入式开发板 |
| PowerPC | ppc, ppc64 | 老款 Mac、高性能计算集群、IBM 服务器 |
| s390x | s390x | IBM 大型机、企业级 Linux 系统 |
| WebAssembly | wasm32 | 浏览器、边缘计算沙箱、跨平台 Web 应用 |
四、ABI vs API:核心区别
| 维度 | API(Application Programming Interface) | ABI(Application Binary Interface) |
|---|---|---|
| 层级 | 源代码层 | 二进制层(编译后) |
| 核心作用 | 定义函数 / 类的调用方式、参数、返回值(源代码接口) | 定义二进制程序与系统 / CPU 的交互规则(二进制接口) |
| 兼容性 | 相同 API 可实现源代码跨平台移植 | 相同 ABI 可实现二进制文件跨平台运行 |
| 示例 | libc 函数声明、Java 接口、Python 模块接口 | x86_64 System V ABI、arm64-v8a Android ABI |
| 依赖 | 依赖编程语言、编译器 | 依赖 CPU 架构、操作系统、目标文件格式 |
📌 关键结论:API 决定 “源代码能不能移植”,ABI 决定 “二进制能不能直接跑”。
五、核心总结
- ABI 是跨平台二进制兼容的核心:相同 ABI 是二进制程序跨系统 / 设备运行的前提,不同 ABI 需重新编译。
- 主流 ABI 格局:x86_64(桌面 / 服务器)、arm64(移动 / 新桌面)、armeabi-v7a(旧移动)、wasm32(Web)是当前最流行的 ABI 类型。
- 选型与适配:
- 桌面 / 服务器开发:优先适配 x86_64,按需支持 arm64;
- 移动开发:Android 优先 arm64-v8a,按需保留 armeabi-v7a;iOS 仅需支持 arm64e;
- 嵌入式开发:根据芯片架构选择对应 ABI(如 ARMv7/ARM64/RISC-V)。
- 多 ABI 支持:通过多架构打包(如 Android AAB、Linux 多架构镜像)可提升兼容性,但会增加包体积,需按需取舍。
阅读剩余
网站声明
本站内容可能存在水印或引流等信息,请擦亮眼睛自行鉴别;以免上当受骗;
本站提供的内容仅限用于学习和研究目的,不得将本站内容用于商业或者非法用途;