跳到主要内容
极客日志极客日志
首页博客AI提示词GitHub精选代理工具
搜索
|注册
博客列表
C++

基于 lycium 工具在鸿蒙设备验证交叉编译的 C/C++ 三方库

综述由AI生成在鸿蒙设备上使用 lycium 工具验证交叉编译后的 C/C++ 三方库的方法。内容包括下载并上传 CI 工具包、配置环境变量、编写 HPKCHECK 测试脚本以及通过 ctest 或 make 执行测试用例。提供了 cJSON、bzip2 和 libuuid 等库的配置示例及常见问题排查指南,确保原生库功能完整性。

观心发布于 2026/3/22更新于 2026/5/7880 浏览
基于 lycium 工具在鸿蒙设备验证交叉编译的 C/C++ 三方库

📌 通过完成从环境到交叉编译,成功鸿蒙化适配 C/C++ 三方库后,将需要进入验证环节。业界内 C/C++ 三方库测试框架多种多样 (ctest、make check 以及原生库 demo 用例等),我们无法将其统一,因此为了确保原生库功能的完整性,需基于原生库的测试用例进行测试验证。三方库测试主要是 make test、ctest 等测试命令,因此需要集成 make、cmake、busybox、perl、shell_cmd 工具。

📥 下载二进制文件

💻 执行以下命令,将 Lycium CI tools 工程克隆到本地。

cd /data # 自定义目录
mkdir tools # 自定义目录
cd tools # 自定义目录
git clone https://gitee.com/han_jin_fei/lycium-citools.git

image-20260203173405712

  • 📱 AARCH64-linux-ohos 设备
    • 📦 arm64-v8a-cmake_make.tar.gz:存放的是 aarch64 静态编译的 cmake 套件和 make 工具,可以在 64 位 ohos 设备上运行 make test,和 ctest 测试套;
    • 🔧 arm64-v8a-busybox.tar.gz:存放的是 aarch64 静态编译的 busybox 工具,可以在 64 位 ohos 设备上运行 toybox 不支持的 sh 命令;
    • 📄 arm64-v8a-perl.tar.gz:存放的是 aarch64 静态编译的 perl 工具及编译时使用的源码,此工具包解压后直接放入 ohos 设备的 /data 目录使用(请勿移动位置);
    • ⌨️ arm64-v8a-shell_cmd.tar.gz:存放的是 aarch64 静态编译的其他 shell 命令行工具。
  • 📱 ARM-linux-ohos 设备
    • 📦 armeabi-v7a-cmake_make.tar.gz: 存放的是 arm 静态编译的 cmake 套件和 make 工具,可以在 32 位 ohos 设备上运行 maketest,和 ctest 测试套;
    • 🔧 armeabi-v7a-busybox.tar.gz: 存放的是 arm 静态编译的 busybox 工具,可以在 32 位 ohos 设备上运行 toybox 不支持的 sh 命令;
    • 📄 armeabi-v7a-perl.tar.gz: 存放的是 arm 静态编译的 perl 工具及编译时使用的源码,此工具包解压后直接放入 ohos 设备的 /data 目录使用(请勿移动位置);
    • ⌨️ armeabi-v7a-shell_cmd.tar.gz: 存放的是 arm 静态编译的其他 shell 命令行工具。
  • ⚙️ setCIenv.sh:自动配置 CI 环境的脚本,该脚本必须和当前目录下的工具包在同一目录下,将 CI 资源部推送到开发板并解压后只需执行以下命令即可。
# 将 lycium-citools 压缩上传到测试机,使用 hdc 登录测试机,解压 lycium-citools,进入 lycium-citools 目录
sh setCIenv.sh # 自动配置
  • ✔️ SHA512SUM:文件校验。
sha512sum -C SHA512SUM 

📤 使用 hdc 将 lycium-citools 压缩上传到测试机

💻 执行命令将 lycium-citools 压缩。

cd ~/OpenHarmony/tools
tar -zcvf lycium-citools.tar.gz lycium-citools

image-20260203174229476

🔗 将开源鸿蒙开发板通过数据线链接到电脑上,通过 hdc 命令将 lycium-citools 压缩工具包上传进 ohos 设备的 /data 目录。

⚠️ 注意:确保 hdc 命令已经在环境变量中配置。若未配置需要在终端执行 open ~/.zshrc 将以下内容粘贴复制到配置文件底部,前提是你已经安装了 DevEco Studio 工具。当然也可以使用 SDK 中 toolchains 目录。

💻 执行以下命令查看开发板是否已经链接,使用 hdc file send 将 lycium-citools 压缩工具包上传。

hdc file send lycium-citools.tar.gz /data

image-20260204105221802

📂 执行 hdc shell 进入命令行交互模式,进入 data 目录执行命令 tar -zxvf lycium-citools.tar.gz 解压刚才上传的压缩包文件。

hdc shell
cd data
tar -zxvf lycium-citools.tar.gz

image-20260204105520227

✅ 解压完成后,进入 lycium-citools 目录,执行 sh setCIenv.sh 命令自动完成 CI 环境配置。

cd lycium-citools
sh setCIenv.sh

image-20260204105906319

💡 注意:若出现 setCIenv.sh[69]: make: inaccessible or not found、setCIenv.sh[70]: cmake: inaccessible or not found、setCIenv.sh[71]: perl: inaccessible or not found 问题,表示当前软链接目录未配置到环境变量中,需要继续执行命令 export PATH=/usr/CI/usr/bin:$PATH 完成环境变量添加。

image-20260206171548485

📝 编写测试脚本

📦 lycium 框架提供了 HPKCHECK 文件供开发者对相应的 C/C++ 三方库的自动化测试,开发者只需要在脚本中配置当前三方库需要测试的命令即可。

📄 HPKCHECK 测试配置模板
# This is an example HPKCHECK file. Use this as a start to creating your own, # and remove these comments.
# Contributor: Your Name <[email protected]>
# Maintainer: Your Name <[email protected]>
source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log
# 测试前的准备,如果不需要可以不写。
checkprepare(){
    return 0
}
# 在 OH 环境执行测试的接口
openharmonycheck() {
    res=0
    # 记录返回值
    cd ${builddir}/${ARCH}-build
    # 进入到测试目录
    ctest > ${logfile} 2>&1
    # 执行测试命令并将测试结果导出到${logfile},测试命令根据每个库的真实情况填写
    res=$?
    # 记录测试结果返回值
    cd $OLDPWD
    # 返回上一次目录
    return $res
    # 返回测试值
}
📚 三种编译方式的测试配置文件
以 cJSON 为例掌握 ctest 测试配置文件 HPKCHECK 📐

✏️ 使用 VSCode 打开 tpc_c_cplusplus 项目,在 thirdparty/cJSON 目录创建 HPKCHECK 文件,按照编译配置模板编写 cJSON 测试配置文件。

source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log
openharmonycheck() {
    res=0
    cd $builddir/$ARCH-build
    echo "start test times: `date`" >> ${logfile} 2>&1
    ctest --timeout 40000 >> ${logfile} 2>&1
    res=$?
    if [ $res -ne 0 ]
    then
        mkdir -p ${LYCIUM_FAULT_PATH}/${pkgname}
        cp Testing/Temporary/LastTest.log ${LYCIUM_FAULT_PATH}/${pkgname}/
    fi
    cd $OLDPWD
    echo "end test times: `date`" >> ${logfile} 2>&1
    return $res
}

image-20260204112519289

以 bzip2 为例掌握 make 测试配置文件 HPKCHECK 🔨

✏️ 使用 VSCode 打开 tpc_c_cplusplus 项目,在 thirdparty/bzip2 目录创建 HPKCHECK 文件,按照编译配置模板编写 bzip2 测试配置文件。

source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log
openharmonycheck() {
    cd $builddir-$ARCH-build
    make check > ${logfile} 2>&1
    res=$?
    cd $OLDPWD
    return $res
}
以 libuuid 为例掌握 原生库测试脚本 测试配置文件 HPKCHECK ⚙️

✏️ 使用 VSCode 打开 tpc_c_cplusplus 项目,在 thirdparty/libuuid 目录创建 HPKCHECK 文件,按照编译配置模板编写 libuuid 测试配置文件。

source HPKBUILD > /dev/null 2>&1
logfile=${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log
openharmonycheck() {
    res=0
    cd ${builddir}/${ARCH}-build
    ./test_uuid > ${logfile} 2>&1
    res=$?
    cd $OLDPWD
    return $res
}

▶️ 执行测试用例

📌 交叉编译完成后,我们需要在 ohos 设备上执行测试用例,保证适配目标库功能完整。测试有三种方式:

  1. 📦 将完整的 tpc_c_cplusplus 推送到 ohos 设备与交叉编译时 tpc_c_cplusplus 所在路径一致的目录下,这种方式使用 lycium/test.sh 脚本执行测试用例,对 ohos 设备存储要求较高,不建议。
  2. 📂 仅向 ohos 推送交叉编译完成的 C/C++ 三方库(即 tpc_c_cplusplus/thirdparty/目标库/目标库 - 版本号),但需要在执行测试用例前在环境变量中配置 LD_LIBRARY_PATH 指向 .so 所在目录,推荐使用这种方式。
  3. 📱 鸿蒙应用集成三方库二进制文件进行测试,这种比较复杂,不建议。
📦 完整推送

💻 在 tpc_c_cplusplus 上级目录执行 tar -zcvf tpc_c_cplusplus.tar.gz tpc_c_cplusplus 将工程进行压缩。

image-20260206180525880

📤 执行 hdc file send tpc_c_cplusplus.tar.gz /xxx 命令将压缩包推送到 ohos 设备上。执行 hdc shell 进入命令行交互模式,进入 data 目录执行命令 tar -zxvf tpc_c_cplusplus.tar.gz 解压刚才上传的压缩包文件。

⚠️ 注意:xxx 为 tpc_c_cplusplus 所在的绝对路径。比如 data 目录,在交叉编译环境设备上 tpc_c_cplusplus 目录下执行 pwd 应该输出的是 /data/tpc_c_cplusplus,ohos 设备 tpc_c_cplusplus 目录下执行 pwd 也应该是同样的路径。因为部分测试用例在编译时可能会指定路径,故需要保证测试机上的路径与编译机的路径是一致。

image-20260206181656151

🚀 测试运行

💻 在 lycium 目录下执行脚本 ./test.sh,自动运行 thridparty 目录下已编译的三方库,并在终端显示已测试三方库总数以及通过和未通过的三方。

./test.sh # 默认测试 thirdparty 目录下的所有已编译的三方库
./test.sh aaa bbb ccc ... # 测试 thirdparty 目录下指定的 aaa bbb ccc ...库 当指定的库未编译时不会进行测试

❓ FAQ:

💡 出现 /bin/sh: ./test.sh: No such file or directory 需要在命令前加 bash。比如 bash ./test.sh cJSON。

💡 出现 ctest command not found, please follow the CITools instruction,需要执行 export PATH=/usr/CI/usr/bin:$PATH 添加环境变量。

📐 cJSON 自动测试(cmake 编译方式)

image-20260206184727774

✅ 出现 check cJSON success 表示测试成功,在 /data/tpc_c_cplusplus/thirdparty/cJSON 目录下可以查看测试日志文件 cJSON_armeabi-v7a_OpenHarmony_4.0.8.1_test.log。

image-20260206185032086

⚙️ libuuid 自动测试(configure 编译方式)

image-20260206185328516

🔨 bzip2 自动测试(make 编译方式)

image-20260206185609930

📂 仅推送交叉编译文件

📌 在上面我们也提到了就是 tpc_c_cplusplus/thirdparty/目标库/目标库 - 版本号 这个目录,该目录下会存在交叉编译后的 CPU 架构的文件。

image-20260209120046831

📦 使用压缩命令 tar -zcvf cJSON-1.7.19.tar.gz cJSON-1.7.19 进行压缩。

image-20260209142243066

📤 并使用 hdc file send cJSON-1.7.19.tar.gz /data 将压缩包推送到 ohos 设备上。

image-20260209142637798

📂 根据 ohos 设备 CPU 架构进入到编译后的文件夹。

image-20260209144614811

▶️ 使用 ctest 命令执行 cJSON 的测试用例。

  • 💡 若提示 /bin/sh: ctest: inaccessible or not found,表示当前 ctest 未配置环境变量,需要在当前终端窗口执行 export PATH=/usr/CI/usr/bin:$PATH 添加环境变量。

image-20260209144710766

  • 💡 执行 ctest 命令提示如下错误信息,则表示运行时加载器找不到动态库,需要通过设置 export LD_LIBRARY_PATH=$PWD:$PWD/tests:$LD_LIBRARY_PATH 指向 .so 所在目录,然后再次执行 ctest 命令。
Test project /data/cJSON-1.7.19/armeabi-v7a-build
Start 1: cJSON_test
1/19 Test #1: cJSON_test .......................***Failed 0.01 sec
...

image-20260209144916740

目录

  1. 📥 下载二进制文件
  2. 将 lycium-citools 压缩上传到测试机,使用 hdc 登录测试机,解压 lycium-citools,进入 lycium-citools 目录
  3. 📤 使用 hdc 将 lycium-citools 压缩上传到测试机
  4. 📝 编写测试脚本
  5. 📄 HPKCHECK 测试配置模板
  6. This is an example HPKCHECK file. Use this as a start to creating your own, # and remove these comments.
  7. Contributor: Your Name <[email protected]>
  8. Maintainer: Your Name <[email protected]>
  9. 测试前的准备,如果不需要可以不写。
  10. 在 OH 环境执行测试的接口
  11. 📚 三种编译方式的测试配置文件
  12. 以 cJSON 为例掌握 ctest 测试配置文件 HPKCHECK 📐
  13. 以 bzip2 为例掌握 make 测试配置文件 HPKCHECK 🔨
  14. 以 libuuid 为例掌握 原生库测试脚本 测试配置文件 HPKCHECK ⚙️
  15. ▶️ 执行测试用例
  16. 📦 完整推送
  17. 🚀 测试运行
  18. 📐 cJSON 自动测试(cmake 编译方式)
  19. ⚙️ libuuid 自动测试(configure 编译方式)
  20. 🔨 bzip2 自动测试(make 编译方式)
  21. 📂 仅推送交叉编译文件
  • 💰 8折买阿里云服务器限时8折了解详情
  • GPT-5.5 超高智商模型1元抵1刀ChatGPT中转购买
  • 代充Chatgpt Plus/pro 帐号了解详情
  • 🤖 一键搭建Deepseek满血版了解详情
  • 一键打造专属AI 智能体了解详情
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 大模型应用开发指南:LangChain 核心概念与实战解析
  • 高原无人机测试:稀薄空气下的飞行控制算法
  • 零基础 AI 入门:从概念理解到实践应用指南
  • UI UX Pro Max:让 AI 辅助生成专业级前端 UI 代码
  • AutoGPT + Python:构建自主 AI 智能体的实战指南
  • 网页底部莫名留白?User Agent Stylesheet 排查与修复
  • Seedream 4.0 深度测评:AI 图像生成从个人创作到企业级应用
  • 无人机仿真与强化学习:gym-pybullet-drones 项目解析
  • Unity+AI 一句话制作完整小游戏实战指南
  • Python pip 包管理工具使用指南
  • 从零开始使用 IsaacLab 训练自己的机器人行走
  • Qwen3-VL 图文融合能力:统一理解与部署实战
  • 行为型设计模式:访问者模式
  • Dify AI 智能体部署与使用详解
  • FAIR plus 机器人全产业链接会:聚焦具身智能与全球协作
  • AI 编程工具深度评测:Lynx、Copilot、Cursor 等五款对比分析
  • 高效AIGC工具推荐:10个热门平台免费与付费功能全指南
  • Linux 基础开发工具使用指南(上)
  • AI 转型攻略:产品经理如何顺利过渡至 AI 领域
  • AI 提示词实战:从设计原则到工程化落地

相关免费在线工具

  • 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