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

常见系统ABI大全/主流系统ABI速查手册:跨平台CPU架构与二进制接口完全指南
ABIApplication Binary Interface,应用二进制接口)是连接编译后二进制程序与底层系统、CPU 架构的核心规范,决定了函数调用、参数传递、内存对齐、寄存器使用等底层行为。本文系统整理了 Windows、LinuxMacOS、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 说明
FreeRTOS 无统一 ABI,依平台而定 微控制器实时操作系统,一般直接编写裸机程序,无需标准 ABI
RTOS / 裸机 无标准 ABI 直接控制硬件,函数调用、栈管理由开发者自行实现
WebAssembly wasm32 虚拟机中间字节码,有独立 ABI 标准,可在浏览器 / 沙箱环境跨平台运行
Barebox/U-Boot 无标准 ABI 系统引导程序,直接与硬件交互,无上层 ABI 依赖

三、按体系结构分类的 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 决定 “二进制能不能直接跑”

五、核心总结

  1. ABI 是跨平台二进制兼容的核心:相同 ABI 是二进制程序跨系统 / 设备运行的前提,不同 ABI 需重新编译。
  2. 主流 ABI 格局:x86_64(桌面 / 服务器)、arm64(移动 / 新桌面)、armeabi-v7a(旧移动)、wasm32(Web)是当前最流行的 ABI 类型。
  3. 选型与适配
    • 桌面 / 服务器开发:优先适配 x86_64,按需支持 arm64;
    • 移动开发:Android 优先 arm64-v8a,按需保留 armeabi-v7a;iOS 仅需支持 arm64e;
    • 嵌入式开发:根据芯片架构选择对应 ABI(如 ARMv7/ARM64/RISC-V)。
  4. 多 ABI 支持:通过多架构打包(如 Android AAB、Linux 多架构镜像)可提升兼容性,但会增加包体积,需按需取舍。
阅读剩余