开源鸿蒙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 场景下绕不过的四个问题头文件路径怎么让编译器找到链接库路径怎么配运行时怎么找到.so鸿蒙强制签名怎么自动化。准备工作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.json设LD_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的开源分享。
开源鸿蒙PC三方库复现:在 CodeArts 里编译、签名并跑起 libplacebo
发布时间:2026/6/16 16:41:06
开源鸿蒙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 场景下绕不过的四个问题头文件路径怎么让编译器找到链接库路径怎么配运行时怎么找到.so鸿蒙强制签名怎么自动化。准备工作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.json设LD_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的开源分享。