OpenHarmony系统支持丰富的设备形态,支持多种架构指令集,支持多种操作系统内核;为了应用在各种OpenHarmony设备上的兼容性,本文定义了"OHOS" ABI(Application Binary Interface)的基础标准,包含如下方面。
字节序和字宽
“OHOS” ABI始终采用little-endian,32位系统采用ILP32,64位系统采用LP64。
过程调用规范
过程调用规范(Procedure Call Standard)定义了函数调用的参数传递方式,寄存器使用规则,栈操作规则等;不同C++编译器,不同操作系统,不同架构都有可能采用不同的调用规则。
OpenHarmony系统采用llvm项目中的libc++作为C++运行时库,在系统侧使用libc++.so库来承载,应用侧使用libc++_shared.so来承载,两侧共用一套代码,采用不同的C++命名空间。
浮点格式
采用IEE754作为浮点编码格式,针对long double的格式定义,将在 支持架构ABI 。
可执行文件格式
OpenHarmony系统采用ELF文件格式作为全系统的二进制文件格式。CPU架构相关的格式定义,参考下面对应架构说明。
支持架构ABI
下面介绍下当前“OHOS” ABI中支持的架构以及差异点。
armeabi-v7a
此ABI使用-mfloat-cpu=softfp作为强制浮点数调用规则,本身不影响实际指令是否使用硬件浮点指令。Neon指令等其他扩展在此ABI中是可选的,为了更好的兼容性,建议应用开发者采用-mfpu=softvfp来编译native库 。
此ABI使用64位long double(IEEE binary64)。
arm64-v8a
此ABI是以《ARM架构应用二进制接口》为基础制定,支持AArch64指令集,默认支持neon特性。
此ABI使用-mfloat-cpu=softfp作为强制浮点数调用规则。
此ABI使用128位long double(IEEE binary128)。
x86_64
此ABI是以Intel64和IA-32 ABI为基础,支持MMX、SSE、SSE2、SSE3、SSSE3、SSE4.1等指令。
此ABI使用128位long double(IEEE binary128),x86架构上很多平台采用float80格式,OpenHarmony仍然采用128bit形式。
在编译架构中指定ABI
DevEco Studio中设置
在OpenHarmony的C++工程中,找到C++代码所在项目build-profile.json5文件buildOption/externalNativeOptions字段,添加abiFilters字段:
{
“abiType”: 'stageMode',
“buildOption”: {
“externalNativeOptions”: {
"path": "./src/main/cpp/CMakeLists.txt",
"arguments": "",
"abiFilters": [
"armeabi-v7a",
"arm64-v8a"
]
}
}
}
cmake中设置
通过SDK CAPI开发native代码的时候,在build/cmake/ohos.toolchain.cmake中定义了OpenHarmony系统一些交叉编译常用的环境变量设置。其中OHOS_ARCH变量定义了当前目标编译的ABI,可以设置下面三个ABI中的一种,arm64-v8a,armeabi-v7a,x86_64。
为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05
《鸿蒙开发学习手册》:
如何快速入门:https://qr21.cn/FV7h05
- 基本概念
- 构建第一个ArkTS应用
- ……
开发基础知识:https://qr21.cn/FV7h05
- 应用基础知识
- 配置文件
- 应用数据管理
- 应用安全管理
- 应用隐私保护
- 三方应用调用管控机制
- 资源分类与访问
- 学习ArkTS语言
- ……
基于ArkTS 开发:https://qr21.cn/FV7h05
- Ability开发
- UI开发
- 公共事件与通知
- 窗口管理
- 媒体
- 安全
- 网络与链接
- 电话服务
- 数据管理
- 后台任务(Background Task)管理
- 设备管理
- 设备使用信息统计
- DFX
- 国际化开发
- 折叠屏系列
- ……
鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH
鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH
1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向