news 2026/10/24 1:56:58

鸿蒙 PC 底层开发技术详解(三):鸿蒙 PC 上的工具链

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙 PC 底层开发技术详解(三):鸿蒙 PC 上的工具链

鸿蒙 PC 上的两套工具链

在前面的文章中有提到,无论是 OpenHarmony 还是 HarmonyOS,在底层编译器视角下都指向同一个目标三元组:aarch64-linux-ohos。在编译器眼中,它是不区分 OpenHarmony 和 HarmonyOS 的,统一都认为是 OpenHarmony。这一基础决定了如今的鸿蒙 PC 工具链生态现状。

在鸿蒙 PC 上,拥有如下两套可用工具链:

  • OpenHarmony SDK:上游工具链,由 OpenHarmony 开源社区维护。
  • HarmonyOS SDK:下游工具链,由华为公司维护。

这两套 SDK 并不是替代关系,而是包含关系:HarmonyOS SDK 内部包含了一套完整的 OpenHarmony SDK。

在 HarmonyOS SDK 的压缩包中,存在openharmony和hms两个子目录。前者存放的就是 OpenHarmony SDK,后者存放的才是 HarmonyOS 特有的工具,如华为的 HMS 相关能力以及闭源的毕昇编译器等。

在我们所关注的编译器方面,HarmonyOS SDK 内部的openharmony/native/llvm和hms/native/BiSheng两个子目录各自提供了一套编译器。前者是 OpenHarmony 社区定制开发的 LLVM 编译器;后者是华为的毕昇编译器,它包含了前者的所有功能,同时还提供了更高的编译性能。这两套编译器都支持aarch64-linux-ohos这个目标三元组,都能用来为鸿蒙 PC 编译程序。

开发者们的普遍选择

虽然毕昇编译器看起来更好,但底层开发者通常不会因此而专门下载一套 HarmonyOS SDK 来使用它,更多时候是直接下载上游的 OpenHarmony SDK 来为鸿蒙 PC 编译程序。

这种技术性选择主要基于以下现实原因:

  1. 工具链同源:在底层 C/C++ 层面,两者的 LLVM 几乎没有功能差异。针对aarch64-linux-ohos这一目标三元组,OpenHarmony SDK 的表现同样稳定。
  2. 分发便利性:HarmonyOS SDK 仅集成在 Command Line Tools 和 DevEco Studio 中进行分发,需要在官网登录账号或通过应用市场下载,无法在服务器环境通过curl或wget等下载器进行匿名下载,对现代 CI/CD 流程而言是巨大的工程阻力。
  3. 交付节奏:作为商业软件,HarmonyOS SDK 相关产物严格遵循厂商的发布周期,更新滞后。相比之下,OpenHarmony SDK 拥有公开的日构建流水线,开发者能第一时间获得最新的特性支持与缺陷修复。
  4. 社区生态惯性:首批鸿蒙 PC 的底层开发者大多是由 OpenHarmony 圈子里的开发者转化而来。他们积累的大量实战文档、编译脚本均基于 OpenHarmony SDK 编写。后来者基于这些资料进行学习时,也自然而然地继承了这一习惯,形成了强大的生态惯性。
  5. 信息不对称:厂商并未在毕昇编译器上进行过多的技术宣发。在缺乏官方推介的情况下,大多数开发者甚至不知道还有这样一套性能经过针对性优化的毕昇编译器存在。

因此,下文的内容将略过使用频率不高的 HarmonyOS SDK,仅针对OpenHarmony SDK进行讲解。

工具链的两种形态

以 OpenHarmony SDK 为例,针对不同的开发场景,这套工具链又表现为两种形态:

  1. 交叉编译 (Cross-Compilation) 工具链:支持开发者在性能强劲的 Linux 服务器或个人工作站上完成编译工作,生成可运行在鸿蒙 PC 上的二进制文件。即“在其他设备上编,在鸿蒙设备上跑”。如果你下载的 ohos-sdk 压缩包解压后看到linux、windows或darwin子目录,那里面存放的就是交叉编译工具链。
  2. 原生编译 (Native Compilation) 工具链:支持开发者直接在鸿蒙 PC 上为自身编译程序。即“在鸿蒙设备上编,在鸿蒙设备上跑”。如果你下载的 ohos-sdk 压缩包解压后看到ohos子目录,那里面存放的就是原生编译工具链。

工具链的获取渠道

OpenHarmony SDK 的官方获取渠道有两处:

  1. OpenHarmony 社区 Release 文档:
    每当 OpenHarmony 系统发布一个新的 Release 版本,社区都会为其提供一个 Release 文档,里面不仅提供了归档好的系统源码和系统镜像包下载链接,同样提供了配套的 OpenHarmony SDK 下载链接。
  2. OpenHarmony 社区流水线:
    从社区流水线中,不仅可以下载到正式的 Release 版本产物,还可以下载到任意一天的日构建产物。

除了官方获取渠道以外,还存在一些二次分发的获取渠道,这里不展开介绍。

交叉编译场景演示

这里演示如何基于 Ubuntu 24.04 x64 服务器进行交叉编译。

准备 ohos-sdk

# 1. 从 OpenHarmony 官方 Release 链接下载 ohos-sdkcurl-fL-oohos-sdk.tar.gz https://repo.huaweicloud.com/openharmony/os/7.0-Release/ohos-sdk-windows_linux-public_20260829.tar.gz# 2. 解压tar-zxfohos-sdk.tar.gz-C~/ ohos-sdk# 3. 解压核心的 native 和 toolchains 软件包cd~/ohos-sdk/linuxunzip-uqnative-*.zipunzip-uqtoolchains-*.zipcd-# 4. 将编译器与签名工具路径加入 PATH 环境变量exportPATH=~/ohos-sdk/linux/native/llvm/bin:~/ohos-sdk/linux/toolchains/lib:$PATH

创建一个简单的测试程序my_program.c

#include<stdio.h>intmain(){printf("Hello, HongMeng PC!\n");return0;}

使用 ohos-sdk 中的编译器进行交叉编译,并签名

clang--target=aarch64-linux-ohos my_program.c-omy_program binary-sign-tool sign-selfSign1-inFilemy_program-outFilemy_program

将这个编译好的my_program程序放到鸿蒙 PC 上,可正常运行

./my_program# 输出:Hello, HongMeng PC!

原生编译场景演示

这里演示如何基于鸿蒙PC HiShell 环境进行原生编译。

准备 ohos-sdk

# 1. 从 OpenHarmony 官方 Release 链接下载 ohos-sdkcurl-fL-oohos-sdk.tar.gz https://repo.huaweicloud.com/openharmony/os/7.0-Release/ohos-sdk-windows_linux-public_20260829.tar.gz# 2. 解压tar-zxfohos-sdk.tar.gz-C~/ ohos-sdk# 3. 解压核心的 native 和 toolchains 软件包cd~/ohos-sdk/ohosunzip-uqnative-*.zipunzip-uqtoolchains-*.zipcd-# 4. 将编译器与签名工具路径加入 PATH 环境变量exportPATH=~/ohos-sdk/ohos/native/llvm/bin:~/ohos-sdk/ohos/toolchains/lib:$PATH

创建一个简单的测试程序my_program.c

#include<stdio.h>intmain(){printf("Hello, HongMeng PC!\n");return0;}

使用 ohos-sdk 中的编译器进行原生编译,并签名

clang my_program.c-omy_program binary-sign-tool sign-selfSign1-inFilemy_program-outFilemy_program

这个编译好的my_program程序可在鸿蒙 PC 上正常运行

./my_program# 输出:Hello, HongMeng PC!
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 1:52:56

Kubernetes-学习记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:51:25

视频网站无水印下载(傻瓜版)

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 1:47:56

TgtoDrive性能优化:如何提高监控效率与转存速度的终极指南

TgtoDrive性能优化&#xff1a;如何提高监控效率与转存速度的终极指南 TgtoDrive作为一款全流程网盘媒体自动化平台&#xff0c;在资源监控、自动转存、智能整理和STRM生成方面表现出色。本文将为您揭秘TgtoDrive性能优化的核心技巧&#xff0c;帮助您显著提升监控效率和转存速…

作者头像 李华
网站建设 2026/10/24 1:46:02

RPCS3 安装 PS3 固件:4 步跑通,告别 Missing Firmware 警告

RPCS3 安装 PS3 固件&#xff1a;4 步跑通&#xff0c;告别 Missing Firmware 警告 【免费下载链接】rpcs3 PlayStation 3 emulator and debugger 项目地址: https://gitcode.com/GitHub_Trending/rp/rpcs3 RPCS3 固件安装是跑 PS3 游戏的前置条件&#xff0c;没装固件时…

作者头像 李华
网站建设 2026/10/24 1:44:47

zapret-discord-youtube国际化:多语言支持和本地化方案

zapret-discord-youtube国际化&#xff1a;多语言支持和本地化方案 概述 zapret-discord-youtube 是一个专为 Windows 系统设计的网络流量绕过工具&#xff0c;主要用于解除对 Discord 和 YouTube 等国外平台的封锁。随着用户群体的全球化扩展&#xff0c;项目的国际化&#xf…

作者头像 李华