面向鸿蒙原生 C/C++ 开发时,三方库数量多、构建系统各异,依赖管理很容易变成脚本堆叠与不可复现的 CI 问题。QT官方最近分享和贡献了支持HarmonyOS系统的vcpkg ,这是个好消息,感谢QT官方的贡献!本文从 vcpkg 的定位出发,说明它在 OHOS( HarmonyOS)交叉编译场景下的价值,并给出可执行的搭建与安装步骤;文末集中列出参考与仓库地址。
QT官方2026年4月10号分享和贡献了支持HarmonyOS系统的vcpkg,这意味着海量的三方库(上千个)鸿蒙化移植从此变得简单了,借助QT官方修改后的 vcpkg 分支,只需一条命令即可完成三方库的安装。且vcpkg本身是跨平台的,跟windows下的使用习惯一致。
QT官方介绍博文链接 :https://www.qt.io/blog/building-libraries-for-harmonyos-with-vcpkg
"我们目前正在将 Qt 移植到HarmonyOS。我们的持续集成 (CI) 和开发机器需要一些专为 HarmonyOS 构建的第三方库。为该平台交叉编译开源 C 和 C++ 库一直以来都是一个手动且容易出错的过程。每个库都有自己的构建系统,例如 CMake、Autotools 或 Meson。每个库都需要单独处理才能生成适用于 OHOS 目标的正确二进制文件。我们一直维护着一个手写的 shell 脚本,该脚本逐个构建库,并针对每个库的交叉编译问题提供相应的变通方案。现在,借助我们修改后的 vcpkg 分支,该脚本只需一条命令即可完成。"

相关资源(建议收藏)
| 说明 | 地址 |
|---|---|
| Qt 官方博文(背景、动机与步骤原文) | Building C/C++ libraries for HarmonyOS with vcpkg |
Qt 侧 vcpkg 仓库(ohos 分支,含 registry 与 OHOS 相关改动) |
https://git.qt.io/jobor/vcpkg |
Qt 侧 vcpkg-tool 仓库(ohos 分支,可执行工具本体) |
https://git.qt.io/jobor/vcpkg-tool |
vcpkg 国内镜像 (作者同步到 GitCode,clone 往往比直连 git.qt.io 更快;非 Qt 官方托管,使用前请自行核对分支与提交) |
https://gitcode.com/qq8864/vcpkg |
从 git.qt.io 拉取大仓库时,网络不稳定或速度偏慢是常见情况;registry(vcpkg) 可优先尝试上表 GitCode 镜像(或者自己fork一份),vcpkg-tool 仍以 Qt 官方仓为准(当前未提供镜像地址时,可配合代理或浅克隆 git clone --depth 1 等策略)。
目录
- [什么是 vcpkg](#什么是 vcpkg)
- 鸿蒙生态与三方库构建的痛点
- [使用 vcpkg 管理鸿蒙三方库的重大意义](#使用 vcpkg 管理鸿蒙三方库的重大意义)
- [Qt 团队为鸿蒙做的 vcpkg 扩展(fork 现状)](#Qt 团队为鸿蒙做的 vcpkg 扩展(fork 现状))
- 环境准备
- [从零搭建:vcpkg-tool 与 registry](#从零搭建:vcpkg-tool 与 registry)
- 安装三方库与典型工作流
- [在 CMake 工程中使用](#在 CMake 工程中使用)
- [与 Qt 构建的集成要点](#与 Qt 构建的集成要点)
- [可用 triplet 与产物特征](#可用 triplet 与产物特征)
- 上游化与长期维护展望
- 相关问题FAQ
- 小结与建议
- 参考文献与链接
1. 什么是 vcpkg
vcpkg 是微软开源的 C/C++ 包管理器,面向原生库与工具链生态,核心能力包括:
- 统一入口:用同一套命令与元数据(port)描述大量开源库的获取、配置、编译与安装。
- 跨平台与交叉编译 :除 Windows、Linux、macOS 等主机平台外,社区与官方长期维护对 Android、iOS 等目标的交叉编译支持;各类 fork 也会为新兴平台补充 toolchain 与 triplet。
- 依赖解析:自动处理依赖树、版本约束与构建顺序,减少"手工拼 Makefile / 逐个改 CMake 交叉参数"的成本。
- 与 CMake 深度集成 :通过
scripts/buildsystems/vcpkg.cmake等机制,让业务工程以标准 CMake 方式消费已安装的库与配置文件。
它已经能够处理 Android、iOS 和其他嵌入式目标的交叉编译。将 HarmonyOS 添加为一级平台意味着 OHOS 开发人员无需对每个库的构建系统进行修改,即可使用整个 vcpkg 移植目录。
对鸿蒙而言,vcpkg 可以把 "每个库一套脚本、一套坑" 收敛为 "平台 triplet + 少量 port 补丁 + 一条安装命令"。
2. 鸿蒙生态与三方库构建的痛点
在将 Qt 等大型框架移植到鸿蒙、或在鸿蒙上直接开发原生模块时,往往需要大量第三方库(图像编解码、网络、国际化、字体与渲染相关依赖等)。这类工作里常见的问题包括:
| 痛点 | 说明 |
|---|---|
| 构建系统碎片化 | 同一依赖可能分别使用 CMake、Autotools、Meson 等,交叉编译参数与探测逻辑各不相同。 |
| 手工流程易错 | 维护"按库编写 shell 脚本 + 每库 workaround"的方式难以规模化,CI 与多开发者机器难以复现。 |
| 平台差异隐蔽 | OHOS SDK 的 toolchain、ABI、动态库命名(如 soname 策略)等与 Linux/Android 并不完全等价,需要集中治理。 |
因此,团队通常需要 可复现、可缓存、可版本化 的依赖安装方案;vcpkg 是契合该方向的工具之一。
3. 使用 vcpkg 管理鸿蒙三方库的重大意义
将 vcpkg 用于鸿蒙三方库安装,大致可以概括成下面几条。
3.1 从"脚本集合"到"单一命令"
手写 shell 逐库处理交叉编译怪癖,维护成本很高;在引入带 OHOS 支持的 vcpkg fork 后,日常操作可以收敛为 一条 vcpkg install --triplet <ohos-triplet> ...(具体 triplet 见第 10 节),显著降低维护与培训成本。
3.2 让 vcpkg 的 port 目录成为"公共资产"
vcpkg 的 port 目录 由社区持续维护:版本升级、补丁、依赖声明、平台表达式等都以结构化方式沉淀。对 OHOS 而言,一旦平台在 fork 或上游里稳定落地,海量库的构建配方不必在每个业务仓库重复发明。
3.3 提升 CI 与团队协作一致性
统一 VCPKG_ROOT、统一 triplet、统一 OHOS_SDK_ROOT,再配合缓存(二进制缓存或制品库策略),可以让 开发机、CI、发布流水线 对三方库的来源与哈希达成一致,减少"我机器上能编、你机器上链接不过"的问题。
3.4 与 CMake / Qt 生态自然衔接
Qt 已支持使用 vcpkg 提供的三方库进行构建 ;Qt 6.11 起,configure 还可配合 manifest 模式 在配置阶段自动安装依赖,让"应用/框架构建"和"原生依赖供给"的边界更清晰。
当前 OHOS 相关支持主要集中在 Qt 维护的 vcpkg / vcpkg-tool fork;微软上游仓库仍在推进合并(见第 11 节)。
4. Qt 团队为鸿蒙做的 vcpkg 扩展(fork 现状)
这套 fork 的改动刻意保持 小而聚焦,大致分两块。
4.1 vcpkg-tool fork(约一个提交)
- 在工具链侧将
ohos识别为合法的平台标识符。 - 材料里常把 OHOS 与 HarmonyOS 当作同一语境下的表述;SDK 的 toolchain 文件也沿用相同命名习惯。
4.2 vcpkg registry fork
registry 侧主要增加:
- OHOS toolchain 文件:委托给 HarmonyOS SDK 自带的 native toolchain。
- 三组社区 triplet :
arm64-ohos、arm-ohos、x64-ohos。 - 平台检测能力 :使 port 表达式(例如
"supports": "!uwp"一类)能够 包含或排除 OHOS。 - portfile 补丁 :已知需要 OHOS 单独适配的库里,当前包含 libpng、fontconfig、ICU 等(具体列表会随分支演进变化,以仓库为准)。
5. 环境准备
建议准备如下环境(与 Qt 侧公开文档中的要求对齐,可减少踩坑概率):
| 组件 | 要求 |
|---|---|
| HarmonyOS SDK | 需包含 native 工具链 ,建议 API 12+ |
| CMake | 3.20+ |
| Ninja | 用于生成高效构建 |
| Git | 克隆 fork 仓库 |
企业内网若无法直连 git.qt.io,请配置代理,或对 vcpkg 使用文首表格中的 GitCode 镜像。
6. 从零搭建:vcpkg-tool 与 registry
下面给出一种常见目录布局;可将 ~/ 换成你的linux工作目录(Windows 下建议使用无空格路径)。
这里以linux操作系统主机环境 Ubuntu24.04为例:
6.1 构建 vcpkg-tool(从 fork 源码)
上游 vcpkg-tool 尚未识别 OHOS,因此需要从 Qt fork 构建:
构建vcpkg命令行可执行文件:
bash
git clone https://git.qt.io/jobor/vcpkg-tool.git -b ohos ~/vcpkg-tool
cd ~/vcpkg-tool
cmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFF
ninja -C build

最终生成了构建产物vcpkg可执行文件。

若 上面的clone 偏慢,可尝试浅克隆:git clone --depth 1 -b ohos ...(注意浅克隆对后续 git pull 与部分工作流的影响)。
或者从我的gitcode镜像(https://gitcode.com/qq8864/vcpkg-tool )clone:
bash
git clone https://gitcode.com/qq8864/vcpkg-tool.git -b ohos ~/vcpkg-tool
git clone https://gitcode.com/qq8864/vcpkg.git -b ohos ~/vcpkg
6.2 准备 vcpkg registry,并放入构建好的 vcpkg 可执行文件
registry 建议二选一(官方源与镜像需保持同一 ohos 分支语义,切换后请自行 git remote -v / git log 核对):
bash
# 方式 A:Qt 官方 GitLab
git clone https://git.qt.io/jobor/vcpkg.git -b ohos ~/vcpkg
# 方式 B:GitCode 镜像(通常 clone 更快,见文首说明)
git clone https://gitcode.com/qq8864/vcpkg.git -b ohos ~/vcpkg
bash
cd ~/vcpkg
cp ~/vcpkg-tool/build/vcpkg ./
export VCPKG_ROOT=~/vcpkg
6.3 设置 HarmonyOS SDK 路径
路径随本机安装位置变化,下面仅为示例:
bash
export OHOS_SDK_ROOT=~/.local/opt/ohos/command-line-tools/sdk/default/openharmony
我的linux下的HarmonyOS的SDK路径如下:
bash
export OHOS_SDK_ROOT=/root/ohos-sdk/linux/
附 HarmonyOS的SDK下载地址:
bash
sdk_download_url="https://cidownload.openharmony.cn/version/Daily_Version/OpenHarmony_6.1.0.27/20260111_020523/version-Daily_Version-OpenHarmony_6.1.0.27-20260111_020523-ohos-sdk-public.tar.gz"
curl -o ohos-sdk-public.tar.gz $sdk_download_url
mkdir ohos-sdk
tar -zxf ohos-sdk-public.tar.gz -C ohos-sdk
cd ~/ohos-sdk/linux
unzip native-linux-x64-6.1.0.27-Beta1.zip
unzip toolchains-linux-x64-6.1.0.27-Beta1.zip
校验点:该目录下应存在:
native/build/cmake/ohos.toolchain.cmake
若路径不正确,后续 CMake 交叉阶段通常会立即失败。
7. 安装三方库与典型工作流
下面以 classic 模式(与 manifest 模式相对)为例:把库装到统一前缀,便于多项目共享。
bash
vcpkg install --triplet arm64-ohos libpng libjpeg-turbo
要点:
--triplet选择目标 ABI(见第 10 节)。- 可在命令末尾继续追加包名;vcpkg 会解析依赖并顺序构建。
- 默认安装根为:
$VCPKG_ROOT/installed/<triplet>/(包含头文件、库、以及许多库的 CMake config)。
实际项目中建议:将
VCPKG_ROOT、OHOS_SDK_ROOT、triplet 写入团队文档或 CI 变量,并对installed目录或二进制缓存策略达成一致。
8. 在 CMake 工程中使用
CMake 与 vcpkg 的经典集成写法如下:
bash
cmake -S . -B build \
-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \
-DVCPKG_TARGET_TRIPLET=arm64-ohos
含义简述:
vcpkg.cmake:把 vcpkg 的安装前缀、查找路径、工具链逻辑注入到你的工程。VCPKG_TARGET_TRIPLET:告诉 vcpkg 与 CMake 正在为哪一个 OHOS ABI 产出。
若工程还依赖 OHOS NDK/SDK 的其它变量,请按官方 SDK 文档与示例工程一并配置(本文不替代 SDK 官方文档)。
9. 与 Qt 构建的集成要点
- 配置 Qt 时传入
QT_USE_VCPKG=ON,构建系统会自动定位 vcpkg toolchain 并走对应集成路径。 - Qt 6.11 起,configure 可配合 manifest 模式 自动安装依赖(适合"源码树声明依赖、配置即拉取"的工作流)。
选项名称与行为细节以你所用 Qt 版本 的官方文档为准。
10. 可用 triplet 与产物特征
三组 triplet 与 ABI 对应关系如下:
| Triplet | OHOS ABI |
|---|---|
arm64-ohos |
arm64-v8a |
arm-ohos |
armeabi-v7a |
x64-ohos |
x86_64 |
这些 triplet 会产出 动态链接库 ,且具有 无版本后缀的 soname(unversioned sonames)。打包、运行时查找与升级策略上需要团队提前约定(例如随应用分发、或依赖系统镜像中的同名库时的冲突风险)。
11. 上游化与长期维护展望
公开信息里提到,相关改动在往 官方 vcpkg 与 vcpkg-tool 合并;长期目标是让 OHOS 与 Android、iOS 等一样,成为 标准社区 triplet 目标,从而在远期减少对 fork 的依赖,用标准 vcpkg 安装即可覆盖 OHOS。
在 upstream 完成之前,团队应关注:
- fork 分支与上游的差异更新节奏;
- 安全补丁与 CVE 修复如何在 port 层同步;
- 二进制缓存与供应链审计(来源、哈希、可复现构建)。
12. 相关问题FAQ
1. github下载速度太慢,超时报错:

从镜像站(https://ghproxy.link/)下载:
bash
wget https://ghfast.top/https://github.com/Kitware/CMake/releases/download/v3.31.10/cmake-3.31.10-linux-x86_64.tar.gz
将下载好的 .tar.gz 文件上传到服务器的 ~/vcpkg/downloads 目录下。
或者直接使用wget下载到downloads目录下,如:
bash
root@VM-0-12-ubuntu:~/vcpkg$
wget -P downloads https://ghfast.top/https://github.com/openssl/openssl/archive/openssl-3.6.1.tar.gz
#或者:
wget -O ~/vcpkg/downloads/openssl-openssl-openssl-3.6.1.tar.gz https://ghfast.top/https://github.com/openssl/openssl/archive/openssl-3.6.1.tar.gz
bash
# 设置环境变量,使用代理加速(这里以一个常用的 GitHub 加速代理为例)
export VCPKG_DOWNLOAD_MODE=allow
export VCPKG_DOWNLOADS_URL_TEMPLATE="https://ghproxy.com{path}"
# 再次尝试安装
./vcpkg install --triplet arm64-ohos libpng

恭喜,你的安装已经成功了!
日志最后的 All requested installations completed successfully 表明 libpng 及其依赖项 zlib 的编译、安装和包校验都已经完成,你现在可以直接在项目中使用它。
至于图中的报错内容 sh: 1: zip: not found。
这是因为 vcpkg 在成功安装包后,会尝试调用系统的 zip 命令将安装好的二进制文件压缩,存入二进制缓存(Binary Cache)。由于我的 Ubuntu 系统中没有安装 zip 工具,导致缓存动作失败。但这没有实际的影响。(如果想消除这个报错并开启缓存功能,只需在 Ubuntu 上安装 zip 工具)
库已经正确安装到了 vcpkg/packages 目录下,你的编译和链接逻辑可以正常运行。
2.如何验证编译出的是ohos平台下的?
要验证针对 arm64-ohos(鸿蒙 arm64 架构)交叉编译的库是否可用,通常有两种验证方式:静态检查(检查文件格式)和编译链接验证(编写测试程序)。
- 静态检查:验证文件架构(最快速)
bash
root@VM-0-12-ubuntu:~/vcpkg/packages/libpng_arm64-ohos# cd lib/
root@VM-0-12-ubuntu:~/vcpkg/packages/libpng_arm64-ohos/lib# ls
libpng16.so libpng.so pkgconfig
root@VM-0-12-ubuntu:~/vcpkg/packages/libpng_arm64-ohos/lib# /root/ohos-sdk/linux/native/llvm/bin/llvm-readelf libpng16.so
root@VM-0-12-ubuntu:~/vcpkg/packages/libpng_arm64-ohos/lib# /root/ohos-sdk/linux/native/llvm/bin/llvm-readelf -h libpng16.so
ELF Header:
Magic: 7f 45 4c 46 02 01 01 00 00 00 00 00 00 00 00 00
Class: ELF64
Data: 2's complement, little endian
Version: 1 (current)
OS/ABI: UNIX - System V
ABI Version: 0
Type: DYN (Shared object file)
Machine: AArch64
Version: 0x1
Entry point address: 0x0
Start of program headers: 64 (bytes into file)
Start of section headers: 274432 (bytes into file)
Flags: 0x0
Size of this header: 64 (bytes)
Size of program headers: 56 (bytes)
Number of program headers: 11
Size of section headers: 64 (bytes)
Number of section headers: 41
Section header string table index: 38
预期输出:
Class: ELF64
Machine: AArch64
OS/ABI: (通常会显示为 UNIX - System V 或特定的 OHOS 标识)
- 编译链接验证:编写测试程序
创建一个简单的 C++ 文件 test_png.cpp,调用 libpng 的函数。
c
#include <png.h>
#include <iostream>
int main() {
// 调用 libpng 库函数获取版本信息
const char* version = png_get_libpng_ver(nullptr);
if (version) {
std::cout << "libpng version: " << version << std::endl;
return 0;
}
return 1;
}
3.下载安装库报错:error: vcpkg was unable to detect the active compiler's information
如果按照前面正确操作步骤是没错的。以下报错是因为没有设置OHOS_ROOT_SDK路径导致的:
CMake Error at /root/vcpkg/scripts/toolchains/ohos.cmake:22 (message): Could not find the OHOS SDK. Set the OHOS_SDK_ROOT environment variable to

解决办法:
bash
export OHOS_SDK_ROOT=/root/ohos-sdk/linux/
4.下载安装openssl库报错:
这个问题呢,就是当前QT官方刚推出的vcpkg分支存在的问题了:
部分库的portfile.cmake移植脚本还没有完全的支持鸿蒙平台。这个呢,你自己也可以参与贡献或者根据提示来解决:

根据报错提示,找到/root/vcpkg/ports/openssl/unix/portfile.cmake 文件的第122行:
增加ohos鸿蒙平台的支持:
bash
elseif(VCPKG_TARGET_IS_OHOS) # 新增这一段,支持OHOS平台
vcpkg_cmake_get_vars(cmake_vars_file)
include("${cmake_vars_file}")
string(APPEND VCPKG_C_FLAGS " --target=${VCPKG_DETECTED_CMAKE_C_COMPILER_TARGET}")
string(APPEND VCPKG_CXX_FLAGS " --target=${VCPKG_DETECTED_CMAKE_CXX_COMPILER_TARGET}")
else()
message(FATAL_ERROR "Unknown platform")
endif()
这段代码的作用是将 CMake 探测到的底层编译器目标架构(Target Triple)强制同步给 vcpkg 的编译参数。
它是交叉编译(Cross-Compilation)中的关键步骤,
具体拆解如下:
vcpkg_cmake_get_vars(cmake_vars_file)
功能:这会启动一个精简的 CMake 环境,利用你提供的鸿蒙工具链(Toolchain)去探测编译器的各种属性。
探测内容:它会找出编译器实际使用的 C/C++ 标准、宏定义、以及最重要的------Target Triple(例如 aarch64-linux-ohos)。include("${cmake_vars_file}")
功能:将上述探测到的结果导入到当前的脚本上下文中。
结果:导入后,你就可以使用以 VCPKG_DETECTED_ 开头的变量,比如 ${VCPKG_DETECTED_CMAKE_C_COMPILER_TARGET}。string(APPEND VCPKG_C_FLAGS " --target=...")
功能:核心步骤。将探测到的目标架构字符串(如 aarch64-linux-ohos)以 --target 参数的形式追加到全局编译指令中。
为什么需要它?
防止"张冠李戴":Clang 是一个通用编译器。即使你调用了鸿蒙 SDK 里的 Clang,如果你不显式告诉它 --target=aarch64-linux-ohos,它可能会默认按照宿主机(你的 Ubuntu x86_64)去编译,导致生成的二进制文件无法在鸿蒙上运行。
确保一致性:这保证了后续编译 openssl 或 curl 时,每一行编译命令都明确指向了鸿蒙的 ARM64 架构。
接下来又有新的报错:

bash
DEBUG: APPLINKDIR = ms => APPLINKDIR = /root/vcpkg/buildtrees/openssl/arm64-ohos-rel/ms, APPLINKDIR_REL_PREFIX = ms
DEBUG: ENGINESDIR = engines => ENGINESDIR = /root/vcpkg/buildtrees/openssl/arm64-ohos-rel/engines, ENGINESDIR_REL_LIBDIR = engines
DEBUG: MODULESDIR = providers => MODULESDIR = /root/vcpkg/buildtrees/openssl/arm64-ohos-rel/providers, MODULESDIR_REL_LIBDIR = providers
DEBUG: PKGCONFIGDIR = . => PKGCONFIGDIR = /root/vcpkg/buildtrees/openssl/arm64-ohos-rel, PKGCONFIGDIR_REL_LIBDIR = .
DEBUG: CMAKECONFIGDIR = . => CMAKECONFIGDIR = /root/vcpkg/buildtrees/openssl/arm64-ohos-rel, CMAKECONFIGDIR_REL_LIBDIR = .
Use of uninitialized value in join or string at ../src/nssl-3.6.1-444317d7e5.clean/util/mkinstallvars.pl line 156.
../src/nssl-3.6.1-444317d7e5.clean/crypto/bn/asm/x86_64-gcc.c:123:9: error: invalid output constraint '=a' in asm
mul_add(rp[0], ap[0], w, c1);
^
../src/nssl-3.6.1-444317d7e5.clean/crypto/bn/asm/x86_64-gcc.c:80:15: note: expanded from macro 'mul_add'
: "=a"(low), "=d"(high) \
^
../src/nssl-3.6.1-444317d7e5.clean/crypto/bn/asm/x86_64-gcc.c:123:9: error: invalid output constraint '+d' in asm
../src/nssl-3.6.1-444317d7e5.clean/crypto/bn/asm/x86_64-gcc.c:84:28: note: expanded from macro 'mul_add'
: "+r"(carry), "+d"(high) \
从日志上看,竟然编译了针对x64平台的特定优化代码。
继续修改openssl的portfile.cmake文件:
bash
elseif(VCPKG_TARGET_IS_OHOS) # 新增这一段,支持OHOS平台
vcpkg_list(APPEND CONFIGURE_OPTIONS
no-asm # 核心修复:禁止汇编优化,避免x86指令冲突
no-sse2 # 核心修复:禁止x86指令集
no-engine # 减小体积,减少环境依赖
no-tests # 跳过测试,节省编译时间
no-srtp # 除非需要音视频加密,否则禁用
)
vcpkg_cmake_get_vars(cmake_vars_file)
include("${cmake_vars_file}")
string(APPEND VCPKG_C_FLAGS " --target=${VCPKG_DETECTED_CMAKE_C_COMPILER_TARGET}")
string(APPEND VCPKG_CXX_FLAGS " --target=${VCPKG_DETECTED_CMAKE_CXX_COMPILER_TARGET}")
set(OPENSSL_TARGET_PLATFORM "linux-aarch64")
else()
message(FATAL_ERROR "Unknown platform")
endif()
最终下载安装成功:

真机上验证
使用前面介绍的vcpkg,配置好环境后直接下载安装 curl进行测试:
bash
export OHOS_SDK_ROOT=/root/ohos-sdk/linux/
#./vcpkg install curl[core,tool]:arm64-ohos --recurse
./vcpkg install curl[core,tool]:arm64-ohos
可以看出使用vcpkg后,安装三方库或命令行工具变得如此简单啦!
上述命令将自动构建出curl及其相关的依赖库(openssl) libz.so、libssl.so、libcrypto.so和libz.so
将相关的依赖库也放到鸿蒙PC上。
注意 :别忘了使用binary-sign-tool工具对可执行文件和依赖库文件进行签名。否则会报错,提示 zsh: operation not permitted。
可以使用以下命令查看是否已签名:
bash
/root/ohos-sdk/linux/native/llvm/bin/llvm-readelf -S libcurl.so
bash
cd test
export LD_LIBRARY_PATH=$(pwd)
binary-sign-tool sign -inFile libz.so -outFile libz.so -selfSign "1"
binary-sign-tool sign -inFile libcrypto.so.3 -outFile libcrypto.so.3 -selfSign "1"
binary-sign-tool sign -inFile libssl.so.3 -outFile libssl.so.3 -selfSign "1"
binary-sign-tool sign -inFile curl -outFile curl -selfSign "1"
binary-sign-tool sign -inFile libcurl.so -outFile libcurl.so -selfSign "1"
#增加可执行权限
chmod +x curl
#运行curl
./curl --help

13. 小结与建议
- vcpkg 把 C/C++ 原生依赖的安装与交叉编译流程 标准化,特别适合三方库多、且不想维护一堆手工脚本的团队。
- 在 OHOS SDK + CMake + Ninja 的前提下,通过 带 OHOS 支持的 vcpkg fork ,可以把依赖安装从"人肉维护"推进到 可重复执行的基础设施。
- 落地建议:固定 triplet 、固定 SDK 路径与 API 级别 、在 CI 中 缓存
installed或启用二进制缓存 、对关键库做 链接与运行期加载 的回归。
将 HarmonyOS 支持添加到 vcpkg ,消除了目前每个 OHOS C/C++ 开发人员面临的每个库单独进行交叉编译的负担。开发人员无需为每个依赖项维护自定义构建脚本,构建配方都保存在一个由社区维护的仓库中。
如果你正在为 HarmonyOS 构建原生库,欢迎尝试使用vcpkg的支持 HarmonyOS 的分支版本,大幅简化了三方库的移植负担。
14. 参考文献与链接
- Qt 官方博文 :Jörg Bornemann,Building C/C++ libraries for HarmonyOS with vcpkg (2026-04-10)--- https://www.qt.io/blog/building-libraries-for-harmonyos-with-vcpkg
- Qt 官方 vcpkg(registry) :https://git.qt.io/jobor/vcpkg
- Qt 官方 vcpkg-tool :https://git.qt.io/jobor/vcpkg-tool
- GitCode 上的 vcpkg 镜像(个人同步,clone 通常更快) :https://gitcode.com/qq8864/vcpkg
- 微软上游 vcpkg(通用文档与生态入口;OHOS 是否已合入以仓库说明为准) :https://github.com/microsoft/vcpkg
最后,欢迎加入开源鸿蒙开发者社区交流:https://harmonypc.csdn.net/