news 2026/6/16 16:40:59

开源鸿蒙PC三方库复现:在 CodeArts 里编译、签名并跑起 libplacebo

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
开源鸿蒙PC三方库复现:在 CodeArts 里编译、签名并跑起 libplacebo

开源鸿蒙PC三方库复现:在 CodeArts 里编译、签名并跑起 libplacebo

欢迎加入开源鸿蒙 PC 社区:https://harmonypc.csdn.net/

开源仓库地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_libplacebo_pc

这一篇换到鸿蒙 PC 自带的CodeArts IDE,演示怎么把 libplacebo 这类 C/C++ 三方库直接编译、签名、运行起来。

本篇基于社区作者wei_shuo的实践整理(https://weishuo.blog.csdn.net/article/details/161293953),结合我自己的复现做了重新组织。

DevEco 和 CodeArts,到底用哪个

简单区分一下我的认知:DevEco 偏「写鸿蒙应用」,CodeArts 在这个场景里更像一个跑在鸿蒙 PC 上的本地 C/C++ 开发环境(CMake + Ninja + clangd)。如果我想在鸿蒙 PC 上就地写一个调用三方库的命令行小程序、快速验证库能不能用,CodeArts 会更顺手。

这次我要解决的,是 CodeArts 场景下绕不过的四个问题:

  1. 头文件路径怎么让编译器找到;
  2. 链接库路径怎么配;
  3. 运行时怎么找到.so
  4. 鸿蒙强制签名怎么自动化。

准备工作

  • CodeArts IDE,建好一个 C++ 工程;
  • 确认 BiSheng LLVM 工具链和binary-sign-tool可用;
  • 拿到 libplacebo 的鸿蒙适配产物(.so+ 头文件,来自前面交叉编译的 tar 包)。

产物的前置检查

和上一篇一样,先llvm-readelf -d体检:看 NEEDED 依赖、看 SONAME。带版本号的.so(如libplacebo.so.362)这次我没改 SONAME,而是把带版本号的文件也一并保留——因为运行时链接器按 SONAME 找,文件在就行。这是和 DevEco 场景一个不同的处理取向。

文件怎么摆

我在工程根目录建了个third_party/

third_party/ ├── include/libplacebo/*.h ← 头文件 └── lib/ ├── libplacebo.so ← 主库 └── libplacebo.so.362 ← 版本号软链/实体,SONAME 对应

五个文件的配置要点

CodeArts 这套要改的文件比 DevEco 多一些,因为它还要管「IDE 的代码索引」和「运行/调试时的环境」。我把五个文件的职责记成一张表:

文件解决什么
CMakeLists.txt头文件路径、链接库、BUILD_RPATH、编译后自动拷贝+签名
main.cpp写测试代码,调用 libplacebo 验证各模块
compile_commands.json手动补-I路径,治 clangd 头文件爆红
tasks.json强制重建 + 自动签名 + 一键运行
launch.jsonLD_LIBRARY_PATH,让调试器找得到库

下面挑几个有「鸿蒙特色」的展开。

签名:这是鸿蒙最硬的一道门

鸿蒙系统要求所有可执行文件和.so都必须经过binary-sign-tool sign签名,否则dlopen直接拒绝加载。我的做法是把签名动作塞进构建的POST_BUILD阶段,编完自动签,不用每次手动敲。

RUNPATH:用 $ORIGIN 让程序「自己找同级目录」

我在 CMake 里设了BUILD_RPATH "$ORIGIN"$ORIGIN表示「可执行文件自己所在的目录」,这样它会优先在同级目录找.so,部署时整个文件夹搬走都不会断链,非常省心。

一个反直觉的小技巧:强制重链

Ninja 很「聪明」,源码没变它就不重新链接,于是POST_BUILD的签名也不会触发,导致我改了东西却跑的是旧的、没签名的产物。解法很糙但有效——在tasks.json里构建前先rm -f掉旧的可执行文件,逼 Ninja 重链一次,签名就跟着触发了。

跑起来

配置完点「开始执行」,CodeArts 会一条龙跑完:清理 → 编译 → 链接 → 签名 → 运行。我写的 main.cpp 里覆盖了 libplacebo 的日志系统、GPU、缓存、纹理、渲染器等十多个模块的冒烟测试,全绿就说明库在鸿蒙上是真能用的。

进阶:让它真的「画」出东西

光打印 OK 还不够直观,我顺手扩了下 main.cpp,做了个零依赖的 BMP 编码(自己拼 BMP 文件头,不引图像库),用 libplacebo 的纹理创建/上传/下载 API 生成了三张图:RGB 渐变、SDR/HDR 对比、GPU 能力信息图。能输出图片,意味着纹理这条核心路径是通的,比一堆文字日志更有说服力。

小结

CodeArts 这条路的价值在于「就地验证」——不用先搭 DevEco 应用工程,在鸿蒙 PC 上就能把一个三方库编出来、签上名、跑起来甚至出图。整套配置抽象出来就是个模板,换 FFmpeg、OpenSSL 照搬即可。

到这里,libplacebo 的「应用层调用(DevEco)」和「本地开发(CodeArts)」两条线都通了。下一篇我打算回到源头,专门聊聊 HPKBUILD 这个配方文件该怎么从零写出来。感谢wei_shuo的开源分享。

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

AI策略性偏差:从幻觉到认知杠杆的技术实践

1. 项目概述:当“幻觉”不再是缺陷,而是一种设计选择你有没有遇到过这样的情况:向AI提问一个非常具体的技术参数,它给出的答案精确到小数点后三位,单位、来源、适用场景一应俱全,但你随手一查权威手册&…

作者头像 李华
网站建设 2026/6/16 16:32:03

项目经理势能培养:四大可操作模块与实战路线图

1. 什么是项目经理的“势能”?——别再把它当成玄学很多人一听到“势能”,下意识就联想到物理学里那个被举高的重物,或者武侠小说里高手蓄力时周身涌动的气场。但放在项目管理这个真实、琐碎、充满人情世故的战场上,“势能”根本不…

作者头像 李华
网站建设 2026/6/16 16:31:16

Road of Resistance:一场多模态舞台工程的硬核拆解

“Road of Resistance”——这个标题乍一听像是一首金属乐曲名,事实上它确实是日本传奇视觉系乐队BABYMETAL于2014年发行的代表作之一,收录在同名EP及后续专辑《BABYMETAL》中。但作为一位常年混迹于内容工程、跨媒介项目复现、现场演出技术支撑与粉丝文…

作者头像 李华
网站建设 2026/6/16 16:31:06

NarratoAI:AI智能视频解说解决方案,让创作效率提升10倍

NarratoAI:AI智能视频解说解决方案,让创作效率提升10倍 【免费下载链接】NarratoAI 利用AI大模型,一键解说并剪辑视频; Using AI models to automatically provide commentary and edit videos with a single click. 项目地址: …

作者头像 李华
网站建设 2026/6/16 16:17:52

ModernFlyouts:终极指南 - 用Fluent Design彻底革新Windows提示界面

ModernFlyouts:终极指南 - 用Fluent Design彻底革新Windows提示界面 【免费下载链接】ModernFlyouts A modern Fluent Design replacement for the old Metro themed flyouts present in Windows. 项目地址: https://gitcode.com/gh_mirrors/mo/ModernFlyouts …

作者头像 李华