不同的Android手机使用不同的CPU,而不同的 CPU 支持不同的指令集,CPU 与指令集的每种组合都有专属的应用二进制接口,即 ABI。
ABI包含的信息
- 机器代码应使用的 CPU 指令集。
- 运行时内存存储和加载的字节顺序。
- 可执行二进制文件(例如程序和共享库)的格式,以及它们支持的内容类型。
- 在代码与系统之间传递数据的各种规范。这些规范包括对齐限制,以及系统调用函数时如何使用堆栈和寄存器。
- 运行时可用于机器代码的函数符号列表 - 通常来自非常具体的库集。
NDK支持的ABI
NDK以前支持MIPS,MIPS64,armeabi,但在NDK r17 移除了对这些ABI的支持,其中,MIPS,MIPS64使用的很少可忽略。
armeabi不支持硬件辅助的浮点运算,所有浮点运算都使用编译器的 libgcc.a 静态库中的软件辅助函数。
| ABI | 支持的指令集 |
|---|---|
| armeabi | ARMV5TE 和更高版本,Thumb-1 |
| armeabi-v7a | armeabi,Thumb-2,VFPv3-D16 |
| arm64-v8a | AArch64 |
| x86 | x86 (IA-32),MMX ,SSE/2/3,SSSE3 |
| x86_64 | x86-64,MMX |
ABI和CPU的关系
大多数CPU都支持多种ABI,但是为了获得最佳性能,最好使用CPU的主要ABI。
| CPU | 主要ABI | 支持的ABI |
|---|---|---|
| ARMv5 | armeabi | armeabi |
| ARMv7 | armeabi-v7a | armeabi ,armeabi-v7a |
| ARMv8 | arm64-v8a | armeabi ,armeabi-v7a,arm64-v8a |
| x86 | x86 | armeabi ,armeabi-v7a ,x86 |
| x86_64 | x86_64 | armeabi ,x86 ,x86_64 |














网友评论