首页/文章/ 详情

博客 | 使用vcpkg为HarmonyOS构建C/C++库

4月前浏览147

 

我们目前正在将Qt移植到HarmonyOS。我们的持续集成(CI)和开发机器需要一些专为HarmonyOS构建的第三方库。为该平台交叉编译开源C和C++库一直是一个手动且容易出错的过程。每个库都有自己的构建系统,例如CMake、Autotools或Meson。每个库都需要单独处理才能生成适用于OHOS目标的正确二进制文件。我们一直在维护一个手写的shell脚本,该脚本逐个构建库,并针对每个库的交叉编译问题进行相应的变通处理。

 

有了我们修改后的vcpkg,现在只需一条命令即可完成该脚本的构建。


为什么选择vcpkg?


vcpkg是微软的开源C/C++包管理器。它已经能够处理Android、iOS和其他嵌入式目标的交叉编译。将HarmonyOS添加为一级平台意味着OHOS开发者无需对每个库的构建系统进行修改,即可使用整个vcpkg移植目录。


Qt从某些版本开始支持使用vcpkg提供的第三方库进行构建,并且Qt 6.11引入了一个配置选项,允许以清单模式运行vcpkg并自动安装依赖项。


遗憾的是,vcpkg之前不支持HarmonyOS,但我们在我们的分叉中解决了这一缺陷。


我们的分叉新增内容


这些更改很小且重点突出。vcpkg-tool分叉(仅提交一次)将ohos添加为可识别的平台标识符。请注意,出于历史原因,我们使用OHOS作为HarmonyOS的同义词。SDK的工具链文件也采用了相同的做法。vcpkg注册表分叉新增了以下内容:


  • 一个OHOS工具链文件,用于委托给HarmonyOS SDK的原生工具链

  • 三个社区三元组:arm64-ohos、arm-ohos和x64-ohos

  • 平台检测功能,使得类似“supports”:“!uwp”这样的端口表达式可以包含或排除OHOS

  • 针对需要OHOS特定调整的库的端口文件补丁(目前包括:libpng、fontconfig和ICU)


入门指南


前提条件


  • 带有原生工具链的HarmonyOS SDK(API 12+)

  • CMake 3.20+,Ninja

  • Git


步骤1:从源代码构建vcpkg-tool


上游vcpkg-tool尚不支持OHOS,因此我们从自己的分叉进行构建:





git clone https://git.qt.io/jobor/vcpkg-tool.git -b ohos ~/vcpkg-toolcd ~/vcpkg-toolcmake -S . -B build -GNinja -DCMAKE_BUILD_TYPE=Release -DBUILD_TESTING=OFFninja build

步骤2:设置vcpkg注册表






git clone https://git.qt.io/jobor/vcpkg.git -b ohos ~/vcpkg cd ~/vcpkgcp ~/vcpkg-tool/build/vcpkg ./export VCPKG_ROOT=~/vcpkg


步骤3:设置SDK路径


根据HarmonyOS命令行工具的安装位置:


export OHOS_SDK_ROOT=~/.local/opt/ohos/command-line-tools/sdk/default/openharmony


该目录应包含native/build/cmake/ohos.toolchain.cmake文件。


步骤4:安装库


要将库安装到通用安装根目录,我们使用vcpkg的“经典模式”(而非“清单模式”):


vcpkg install --triplet arm64-ohos libpng libjpeg-turbo ...

完成!vcpkg会解析依赖关系,下载源代码,使用OHOS工具链交叉编译所有内容,并将头文件、库文件和CMake配置文件安装到$VCPKG_ROOT/installed/arm64-ohos目录。


步骤5:在项目中使用


或者使用vcpkg自带的CMake集成:




cmake -S . -B build \-DCMAKE_TOOLCHAIN_FILE=$VCPKG_ROOT/scripts/buildsystems/vcpkg.cmake \-DVCPKG_TARGET_TRIPLET=arm64-ohos

要指示Qt使用vcpkg,请将QT_USE_VCPKG=ON传递给configure。Qt的构建系统将自动查找vcpkg工具链文件的位置并使用它。


可用的三元组


以下三元组适用于HarmonyOS:


三进制    
OHOS ABI    
arm64-ohos    
arm64-v8a    
arm-ohos    
armeabi-v7a    
x64-ohos    
x86_64    


所有三元组都会生成动态链接库,其soname不带版本号。


向上游提交


我们正在努力将这些更改提交到官方的vcpkg和vcpkg-tool代码库。我们的目标是提供标准的社区三元组,使OHOS与Android、iOS和其他交叉编译平台一起成为vcpkg的一流目标平台。


一旦合并到上游,就不需要任何分叉。标准的vcpkg安装将开箱即用地支持OHOS。


结论


将HarmonyOS支持添加到vcpkg可以消除目前每个OHOS C/C++开发人员面临的每个库单独进行交叉编译的负担。无需为每个依赖项维护自定义构建脚本,构建配方都位于一个由社区维护的仓库中。


如果您正在为HarmonyOS构建原生库,请尝试我们的vcpkg分叉,并告诉我们它的使用体验。

来源:IFD优飞迪
System通用UM
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-06-02
最近编辑:4月前
优飞迪科技
赋能新仿真,创优新设计
获赞 326粉丝 351文章 541课程 4
点赞
收藏
作者推荐
未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈