跳到主要内容
Lycium++ - OpenHarmony PC C/C++ 增强编译框架 | 极客日志
C++
Lycium++ - OpenHarmony PC C/C++ 增强编译框架 Lycium++ 是 OpenHarmony PC C/C++ 编译框架的增强版本,提供自动化构建和依赖管理功能。支持多版本共存、外部仓库管理及 HNP 打包。文档涵盖环境准备(macOS/Linux)、原生与增强型构建方式、外部仓库配置规范、HNP 打包流程及常见问题排查。旨在简化 OpenHarmony 原生库在 PC 端的编译与集成工作。
GopherDev 发布于 2026/3/21 更新于 2026/6/1 26 浏览Lycium++ - OpenHarmony PC C/C++ 增强编译框架
项目简介
Lycium++ 是基于 OpenHarmony PC C/C++ 编译框架 Lycium 的增强版本,提供更强大的自动化构建能力和依赖管理功能。
与原生 Lycium 的区别
特性 Lycium(原生) Lycium++(增强) 依赖自动构建 ❌ ✅ 一键构建依赖树 多版本支持 ❌ ✅ 支持多版本共存 外部仓库 ❌ ✅ 独立仓库管理 HNP 打包 ❌ ✅ 原生支持 macOS 支持 ⚠️ 部分 ✅ 完全支持
核心特性
✅ 已实现功能
1. 📦 智能依赖管理
自动构建依赖关系树
一键编译所有依赖库
智能循环依赖检测
2. 🔄 多版本构建能力
支持同一库的多个版本
独立的代码仓库管理
通过外部源码仓获取编译
3. 📥 HNP 产物生成
生成 HarmonyOS Native Package
支持在 HarmonyOS 系统直接使用
自动打包和归档
🚧 规划中功能
4. 📄 开源声明聚合
自动收集所有依赖的开源协议
生成 HTML 格式的声明文件
符合开源合规要求
快速开始
环境准备
系统要求
项目 要求 操作系统 macOS 12+, Linux (Ubuntu 18.04+), HarmonyOS 磁盘空间 至少 10GB 可用空间 内存 建议 8GB 以上 网络 需要访问外网下载源码
必需工具
所有平台通用:
macOS 环境配置
第 1 步:安装 Homebrew /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh) "
第 2 步:安装必需工具
brew install cmake autoconf automake libtool pkg-config
brew install ninja wget coreutils
cmake --version
ninja --version
pkg-config --version
sha512sum --version
第 3 步:下载 OpenHarmony SDK
下载并安装 DevEco Studio
打开 DevEco Studio
进入 Tools → SDK Manager
选择 OpenHarmony SDK
勾选 Native 开发套件
点击 Apply 下载
第 4 步:配置环境变量 在 ~/.zshrc 或 ~/.bash_profile 中添加:
export OHOS_SDK="/Users/$(whoami) /Library/OpenHarmony/Sdk/20"
export PATH="$OHOS_SDK /native/build-tools/cmake/bin:$PATH "
export HNP_TOOL="/path/to/hnp-tool"
第 5 步:验证环境
echo $OHOS_SDK
ls $OHOS_SDK /native/llvm/bin/clang
$OHOS_SDK /native/llvm/bin/clang --version
$OHOS_SDK /native/build-tools/cmake/bin/cmake --version
LLVM version 15.0.4 ...
cmake version 3.16.5
首次编译
克隆项目 git clone https://gitcode.com/your-repo/lycium_plusplus.git
cd lycium_plusplus
快速测试 cd lycium
./build.sh zlib
Build OS Darwin OHOS_SDK=/Users/username/Library/OpenHarmony/Sdk/20
CLANG_VERSION=15.0.4
Start building zlib 1.3.1!
Compileing OpenHarmony arm64-v8a zlib 1.3.1 libs...
...
Build zlib 1.3.1 end!
ALL JOBS DONE!!!
查看编译产物 ls -lh usr/zlib/arm64-v8a/
include/ # 头文件
lib/ # 库文件
share/ # 文档
使用指南
原生构建方式 原生方式使用 lycium 框架编译 community 和 thirdparty 目录中已存在的三方库。
编译单个库 cd lycium
./build.sh zlib
编译多个库 ./build.sh zlib openssl curl
编译所有库
查看编译日志
tail -f lycium_build_intl.log
cat lycium_build_intl.log
增强型构建方式 增强型方式支持外部独立仓库参与构建,实现更灵活的版本管理。
架构示意 lycium_plusplus/
├── lycium/
│ ├── build.sh
│ ├── community/
│ ├── thirdparty/
│ └── usr/
├── community/
├── thirdparty/
└── outerrepo/
├── module .json
└── tree/
工作流程 不存在 -> 是 -> ./build.sh tree -> 检查 outerrepo/tree -> 读取 module.json -> Git Clone 仓库 -> 切换到指定分支 -> 准备编译环境 -> 执行 HPKBUILD -> 编译产物 -> 有 archive? -> 生成 HNP -> 完成
外部仓库管理
module.json 配置文件 外部仓库信息存放在 outerrepo/module.json 中。
配置示例 {
"modules" : [
{
"name" : "tree" ,
"version" : "2.2.1" ,
"branch" : "ohos_2.2.1" ,
"type" : "git" ,
"url" : "https://gitcode.com/OpenHarmonyPCDeveloper/ohos_tree.git"
} ,
{
"name" : "another-lib" ,
"version" : "1.0.0" ,
"branch" : "main" ,
"type" : "git" ,
"url" : "https://github.com/user/another-lib-ohos.git"
}
]
}
配置字段说明 字段 说明 必需 示例 name模块名称,必须与 HPKBUILD 中的 pkgname 一致 ✅ treeversion原生库版本号 ✅ 2.2.1branch适配仓库的分支名 ✅ ohos_2.2.1type源码获取方式 ✅ giturl代码仓库地址 ✅ https://...
外部 Ports 仓规范 ohos_tree/
├── HPKBUILD
├── HPKCHECK
├── hnp.json
├── README.md
├── 0001 -ports-for-ohos.patch
└── SHA512SUM
HPKBUILD 示例
pkgname=tree
pkgver=2.2.1
pkgrel=0
pkgdesc="A directory listing program displaying a depth indented list of files"
url="http://mama.indstate.edu/users/ice/tree/"
archs=("armeabi-v7a" "arm64-v8a" )
license=("GPL" )
depends=()
makedepends=("make" "patch" )
source ="https://github.com/Old-Man-Programmer/tree/archive/refs/tags/${pkgver} .tar.gz"
downloadpackage=true
autounpack=true
buildtools="make"
builddir="tree-${pkgver} "
packagename="${pkgver} .tar.gz"
prepare () {
cd $builddir
patch -p1 < ../0001-ports-for-ohos.patch
cd ${OLDPWD}
}
build () {
cd $builddir
export CC="${OHOS_SDK} /native/llvm/bin/aarch64-linux-ohos-clang"
export CFLAGS="-target aarch64-linux-ohos --sysroot=${SYSROOT} "
make -j8
ret=$?
cd $OLDPWD
return $ret
}
package () {
cd $builddir
install -Dm755 tree "$LYCIUM_ROOT /usr/$pkgname /$ARCH /bin/tree"
install -Dm644 doc/tree.1 "$LYCIUM_ROOT /usr/$pkgname /$ARCH /share/man/man1/tree.1"
cd $OLDPWD
}
archive () {
mkdir -p ${LYCIUM_ROOT} /output/$ARCH
pushd $LYCIUM_ROOT /usr/$pkgname /$ARCH
tar -czf ${LYCIUM_ROOT} /output/$ARCH /${pkgname} _${pkgver} .tar.gz *
popd
cp hnp.json $LYCIUM_ROOT /usr/$pkgname /$ARCH /
${HNP_TOOL} pack -i ${LYCIUM_ROOT} /usr/$pkgname /$ARCH \
-o ${LYCIUM_ROOT} /output/$ARCH /
}
check () {
echo "The test must be on an OpenHarmony device!"
}
cleanbuild () {
rm -rf ${PWD} /$builddir
}
hnp.json 配置 {
"type" : "hnp-config" ,
"name" : "tree" ,
"version" : "2.2.1" ,
"description" : "A directory listing program" ,
"license" : "GPL" ,
"install" : {
"bin" : [ "bin/tree" ] ,
"man" : [ "share/man/man1/tree.1" ]
}
}
使用外部仓库
第 1 步:配置 module.json 在 outerrepo/module.json 中添加模块配置。
第 2 步:执行编译 cd lycium
./build.sh tree
第 3 步:自动化流程
检查 outerrepo/tree 是否存在
如不存在,读取 module.json 配置
执行 git clone -b <branch> <url> tree
执行标准的 lycium 编译流程
HNP 打包
什么是 HNP? HNP (HarmonyOS Native Package) 是 HarmonyOS 的原生包格式,可以直接在 HarmonyOS 系统上安装和使用。
打包流程
1. 在 HPKBUILD 中添加 archive() 函数 archive () {
mkdir -p ${LYCIUM_ROOT} /output/$ARCH
pushd $LYCIUM_ROOT /usr/$pkgname /$ARCH
tar -czf ${LYCIUM_ROOT} /output/$ARCH /${pkgname} _${pkgver} .tar.gz *
popd
cp hnp.json $LYCIUM_ROOT /usr/$pkgname /$ARCH /
${HNP_TOOL} pack \
-i ${LYCIUM_ROOT} /usr/$pkgname /$ARCH \
-o ${LYCIUM_ROOT} /output/$ARCH /
}
2. 执行编译
3. 获取产物 lycium/usr/tree//
├── bin/ # 可执行文件
├── lib/ # 库文件
├── include/ # 头文件
└── share/ # 文档等
lycium/output//
├── tree_2.2.1.tar.gz # tar 归档
└── tree_2.2.1.hnp # HNP 包
HNP 安装
hnp install tree_2.2.1.hnp
hdc file send tree_2.2.1.hnp /data/local/tmp/
hdc shell hnp install /data/local/tmp/tree_2.2.1.hnp
常见问题
macOS 环境相关
Q1: cp: the -R and -r options may not be specified together 原因 :macOS 的 BSD cp 命令参数检查更严格。
解决 :已在最新版本中修复。如果仍遇到,请更新到最新代码:
Q2: pkg-config 命令未安装
Q3: ninja 命令未安装
Q4: wget 命令未安装
Q5: sha512sum: command not found 原因 :macOS 默认没有 sha512sum 命令。
编译问题
Q6: OHOS_SDK 未设置
export OHOS_SDK="/Users/$(whoami) /Library/OpenHarmony/Sdk/20"
echo 'export OHOS_SDK="/Users/$(whoami)/Library/OpenHarmony/Sdk/20"' >> ~/.zshrc
source ~/.zshrc
Q7: 编译时找不到依赖库 CMake Error: Could not find package "ZLIB"
./build.sh zlib
./build.sh target-lib
Q8: SHA512 校验失败
rm thirdparty/pkgname/*.tar.gz
./build.sh pkgname
外部仓库问题
Q9: Git clone 失败
cd outerrepo
git clone -b <branch> <url> <name>
cd <name>
git branch -a
Q10: 外部仓库编译失败
检查 HPKBUILD 语法
查看编译日志
手动进入目录测试
cd outerrepo/pkgname
source HPKBUILD prepare build
贡献指南
如何贡献
贡献新的库适配
Fork 本项目
创建适配仓库(或在本地 thirdparty 目录)
编写 HPKBUILD 和 HPKCHECK
测试编译和运行
提交 Pull Request
报告问题
操作系统和版本
OHOS SDK 版本
完整的错误日志
复现步骤
完善文档
代码规范
Shell 脚本使用 4 空格缩进
函数名使用小写加下划线
添加必要的注释
遵循现有代码风格
测试验证
在 OpenHarmony 设备上测试
1. 准备测试环境
2. 推送代码到设备
tar -czf lycium_plusplus.tar.gz lycium_plusplus/
hdc file send lycium_plusplus.tar.gz /data/local/tmp/
hdc shell
cd /data/local/tmp
tar -xzf lycium_plusplus.tar.gz
3. 执行测试 cd lycium_plusplus/lycium
./test.sh tree
4. 查看测试结果 cat check_result/check_log/tree_*_test.log
参考资源
官方文档
本项目文档
学习资源
许可证 本项目采用 Apache License 2.0 许可证。详见 LICENSE 文件。
致谢 相关免费在线工具 Base64 字符串编码/解码 将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
Base64 文件转换器 将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
Markdown转HTML 将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML转Markdown 互为补充。 在线工具,Markdown转HTML在线工具,online
HTML转Markdown 将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML转Markdown在线工具,online
JSON 压缩 通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
JSON美化和格式化 将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online