news 2026/5/20 17:59:29

鸿蒙 PC 命令行工具迁移实战 · 四种命令行移植方案详解及对比

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
鸿蒙 PC 命令行工具迁移实战 · 四种命令行移植方案详解及对比

鸿蒙 PC 命令行工具及三方库移植如此简单。本文以pngquant命令行移植为实战演示,详细介绍移植pngquant命令行到鸿蒙PC的四种实现方案及对比。从环境搭建到最终的移植产物验证系统性详解,并且可以借助AI的能力,没有移植不了的库。只要这个库能移植,这个库肯定能移植,移植就是这么简单。

鸿蒙 PC 命令行工具迁移实战 · 直播PPT

文章目录

    • 移植方案总览对照表
    • 社区引导
    • 一 、编译环境搭建
      • 1.1 环境准备(Ubuntu 24.04)
      • 1.2下载配置ohos-sdk
      • 1.3 源码获取
    • 二、四种编译方案的使用对比 (手动交叉编译 / Lycium/ vcpkg-ohos /build_in_harmonyos )
    • 方案一 手动交叉编译
      • 2.1 编译环境脚本exports.sh
      • 2.2 构建脚本(build_ohos.sh)
      • 2.3 x86_64上的鸿蒙PC容器中验证
    • 方案二 使用lycium_plusplus编译框架
    • 方案三 使用vcpkg构建鸿蒙三方库
    • 方案四 使用AI自动化编译框架build_in_harmonyos框架
    • 参考链接

pngquant是对 PNG 做有损压缩的命令行工具(GPL-3.0-or-later),在尽量保持观感的前提下减小体积。

pngquant仓库地址:https://github.com/kornelski/pngquant

其经典 2.x 分支以C 语言为主,依赖:

依赖作用
libpng读写 PNG
zlib压缩数据流
lcms2色彩管理(ICC 等),对应 configure 的--with-lcms2

源码默认从GitHub拉取指定 tag(本适配为2.18.0),且需git clone --recursive,以便带上lib/下的libimagequant子模块(pngquant 会静态链接该库)。

移植方案总览对照表

方式核心抽象适合场景长处短处
原始工具链直接交叉编译手搓 flags极简项目 / 教学演示掌控力强依赖多时脚本难维护
Lycium++HPKBUILD + HNP + 设备测鸿蒙生态原生项目贴近 OHOS 分发链学习成本、仓库治理
vcpkg-ohostriplet + portCMake 工程 / Qt 开发者生态庞大、一行命令fork 过渡期;签名和 HNP 自建
build_in_harmonyosOpenDesk Skill + 知识图谱批量移植 / 规模化AI 加持、自动沉淀经验依赖鸿蒙PC本机/网络环境

社区引导

📢 欢迎加入开源鸿蒙 PC 社区! 🌐 社区地址:https://harmonypc.csdn.net/ 📦 三方库仓库:https://atomgit.com/OpenHarmonyPCDeveloper 🤖 AI 编译框架:https://atomgit.com/OpenHarmonyPCDeveloper/build_in_harmonyos 一个人移植一个库,能跑就行; 一群人移植几百个库,生态就成了。

只要这个库能移植,这个库肯定能移植,就这么简单。

一 、编译环境搭建

windows下推荐WSL环境,参见博文:

在 Windows 10 上安装和使用 WSL 2 安装 Ubuntu24详细指南

鸿蒙PC生态三方软件移植:开发环境搭建及三方库移植指南

1.1 环境准备(Ubuntu 24.04)

sudoaptupdatesudoaptinstall-ygitcurlcmake ninja-build gcc g++makeautoconf automake libtool yasm nasmsudoaptinstall-ygettext autopointsudoaptinstallpython3 python3-pipsudoupdate-alternatives--install/usr/bin/python python /usr/bin/python31

1.2下载配置ohos-sdk

工具链的获取渠道
OpenHarmony SDK 的官方获取渠道有两处:

OpenHarmony 社区 Release 文档: 每当 OpenHarmony 系统发布一个新的 Release 版本,社区都会为其提供一个 Release 文档,里面不仅提供了归档好的系统源码和系统镜像包下载链接,同样提供了配套的 OpenHarmony SDK 下载链接。

OpenHarmony 社区流水线: 从社区流水线中,不仅可以下载到正式的 Release 版本产物,还可以下载到任意一天的日构建产物。如果你不知道选哪个产物,可以这么选:交叉编译选 ohos-sdk-full;原生编译选 ohos-sdk-public_ohos。

sdk_download_url="https://cidownload.openharmony.cn/version/Daily_Version/OpenHarmony_6.1.0.27/20260111_020523/version-Daily_Version-OpenHarmony_6.1.0.27-20260111_020523-ohos-sdk-public.tar.gz"curl-oohos-sdk-public.tar.gz$sdk_download_urlmkdirohos-sdktar-zxfohos-sdk-public.tar.gz-Cohos-sdkcd~/ohos-sdk/linuxunzipnative-linux-x64-6.1.0.27-Beta1.zipunziptoolchains-linux-x64-6.1.0.27-Beta1.zip# 将编译器与签名工具路径加入 PATH 环境变量exportPATH=~/ohos-sdk/linux/native/llvm/bin:~/ohos-sdk/linux/toolchains/lib:$PATH

这段代码的作用是从指定的 URL 下载 SDK 压缩包,然后创建一个名为ohos-sdk的目录,并将压缩包解压到该目录下。

创建一个简单的测试程序 my_program.c

#include<stdio.h>intmain(){printf("Hello, HongMeng PC!\n");return0;}

使用 ohos-sdk 中的编译器进行交叉编译,并签名

clang--target=aarch64-linux-ohos my_program.c-omy_program binary-sign-tool sign-selfSign1-inFilemy_program-outFilemy_program#如果需要依赖库,则可以:# 1. 让 pkg-config 去你的目标板 sysroot 目录里找 .pcexportPKG_CONFIG_LIBDIR=/path/to/sysroot/usr/lib/pkgconfigexportPKG_CONFIG_SYSROOT_DIR=""# 2. 在编译时,用反引号 `` 或 $() 把 pkg-config 生成的 -I 和 -L 塞给编译器clang main.c$(pkg-config--cflags--libslibavcodec)-omain

将这个编译好的 my_program 程序放到鸿蒙 PC 上,可正常运行

chmod+x my_program ./my_program

输出:Hello, HongMeng PC!

1.3 源码获取

#clone pngquant 源码gitclone-b2.18.0--recursivehttps://github.com/kornelski/pngquant.git

二、四种编译方案的使用对比 (手动交叉编译 / Lycium/ vcpkg-ohos /build_in_harmonyos )

方案一 手动交叉编译

2.1 编译环境脚本exports.sh

sourceexports.sh

使用猫哥提供的通用脚本(exports.sh),用于一键配置交叉编译环境。更多移植教程,参见猫哥个人博客:(blog.csdn.net/qq8864)

echo"hello exports,交叉编译环境配置"## SDK路径,你唯一需要根据实际的改的地方SDK_PATH="/root/ohos-sdk/linux"echo"SDK_PATH:$SDK_PATH"exportOHOS_SDK="$SDK_PATH"exportHNP_PERFIX=exportCOMPILER_TOOLCHAIN=${OHOS_SDK}/native/llvm/bin/BUILD_OS=$(uname)PYTHON=$(python--version)echo"python :$PYTHON"exportCC=${COMPILER_TOOLCHAIN}clang&&echo"CC :${CC}"exportCXX=${COMPILER_TOOLCHAIN}clang++&&echo"CXX :${CXX}"exportHOSTCC=${CC}&&echo"HOSTCC :${HOSTCC}"exportHOSTCXX=${CXX}&&echo"HOSTCXX :${HOSTCXX}"exportCPP="${CXX}-E"&&echo"CPP :${CPP}"exportAS=${COMPILER_TOOLCHAIN}llvm-as&&echo"AS :${AS}"exportLD=${COMPILER_TOOLCHAIN}ld.lld&&echo"LD :${LD}"exportSTRIP=${COMPILER_TOOLCHAIN}llvm-strip&&echo"STRIP :${STRIP}"exportRANLIB=${COMPILER_TOOLCHAIN}llvm-ranlib&&echo"RANLIB :${RANLIB}"exportOBJDUMP=${COMPILER_TOOLCHAIN}llvm-objdump&&echo"OBJDUMP :${OBJDUMP}"exportOBJCOPY=${COMPILER_TOOLCHAIN}llvm-objcopy&&echo"OBJCOPY :${OBJCOPY}"exportNM=${COMPILER_TOOLCHAIN}llvm-nm&&echo"NM :${NM}"exportAR=${COMPILER_TOOLCHAIN}llvm-ar&&echo"AR :${AR}"exportSYSROOT=${OHOS_SDK}/native/sysrootexportPKG_CONFIG_SYSROOT_DIR=${SYSROOT}/usr/lib/aarch64-linux-ohosexportPKG_CONFIG_PATH=${PKG_CONFIG_SYSROOT_DIR}exportPKG_CONFIG_EXECUTABLE=${PKG_CONFIG_SYSROOT_DIR}exportHNP_TOOL=${OHOS_SDK}/toolchains/hnpcliexportCMAKE=${OHOS_SDK}/native/build-tools/cmake/bin/cmakeexportTOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmakeexportWORK_ROOT=${PWD}exportARCHIVE_PATH=${WORK_ROOT}/outputexportCOMM_DEP_PATH=${WORK_ROOT}/deps_installexportHNP_PUBLIC_PATH=${HNP_PERFIX}/data/service/hnp/exportMAKE_QUITE_PARAM=" -s "exportCONFIGURE_QUITE_PARAM=" --quiet "exportTARGET_PLATFORM=aarch64-linux-ohosexportTARGET=aarch64-linux-ohosexportCFLAGS="-fPIC -D__MUSL__=1 -D__OHOS__ -fstack-protector-strong --target=${TARGET_PLATFORM}--ld-path=${LD}--sysroot=${SYSROOT}-stdlib=libc++ "exportCXXFLAGS="${CFLAGS}"exportLD_LIBRARY_PATH=${SYSROOT}/usr/lib:${LD_LIBRARY_PATH}exportLDFLAGS="--ld-path=${LD}-Wc,--target=${TARGET_PLATFORM}--sysroot=${SYSROOT}-fuse-ld=lld "exportHOST_TYPE="--host=aarch64-linux --build=aarch64-linux"#export NCURSES_INSTALL_HNP_PATH="${HNP_PUBLIC_PATH}/ncurses.org/ncurses_v6.4"mkdir-p${HNP_PUBLIC_PATH}mkdir-p${ARCHIVE_PATH}chmod777-R${HNP_PUBLIC_PATH}mkdir-pcodeecho"LDFLAGS:${LDFLAGS}"#export PKG_CONFIG_PATH="${CUSTOM_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH"

2.2 构建脚本(build_ohos.sh)

https://github.com/kornelski/pngquant/tree/2.18.0
#clone pngquant 源码gitclone-b2.18.0--recursivehttps://github.com/kornelski/pngquant.git

有问题的脚本示例:

#!/bin/bashexportPNGQUANT_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/pngquant.org/pngquant_2.18.0makedistclean||makeclean# 设置依赖的libpng路径(注,编译该库前确保libpng已编译)LIBPNG_PATH=${HNP_PUBLIC_PATH}/libpng.org/libpng_1.8.0ZLIB_PATH=${HNP_PUBLIC_PATH}/zlib.org/zlib_1.3.1# 编译安装PNGQUANTmkdir-p${PNGQUANT_INSTALL_HNP_PATH}#增加链接依赖的库CFLAGS="${CFLAGS:-}-I${LIBPNG_PATH}/include -I${ZLIB_PATH}/include"LDFLAGS="${LDFLAGS:-}-static -L${LIBPNG_PATH}/lib -L${ZLIB_PATH}/lib"CXXFLAGS="${CFLAGS}"exportPKG_CONFIG_LIBDIR="${pkgconfigpath}"exportZLIB_LIBS="-L${ZLIB_PATH}/lib -lz"exportZLIB_CFLAGS="-I${ZLIB_PATH}/include"./configure --with-libpng="$LIBPNG_PATH"\--disable-sse\--extra-cflags="$CFLAGS"\--extra-ldflags="$LDFLAGS"\CC="$CC"\CFLAGS="$CFLAGS"\LDFLAGS="$LDFLAGS"\--prefix=${PNGQUANT_INSTALL_HNP_PATH}makeVERBOSE=1-j$(nproc)ZLIBFLAGS="-I${ZLIB_PATH}/include"LIBS="-L${LIBPNG_PATH}/lib -lpng -L${ZLIB_PATH}/lib${ZLIB_PATH}/lib/libz.a -lm"makeinstall# 生成鸿蒙HNP软件包cphnp.json${PNGQUANT_INSTALL_HNP_PATH}/pushd${PNGQUANT_INSTALL_HNP_PATH}/../${HNP_TOOL}pack-i${PNGQUANT_INSTALL_HNP_PATH}-o${ARCHIVE_PATH}/tar-zvcf${ARCHIVE_PATH}/ohos_pngquant_2.18.0.tar.gz pngquant_2.18.0/popd

报错:
ld.lld: error: --fix-cortex-a53-843419 is only supported on AArch64 targets clang-15: error: linker command failed with exit code 1 (use -v to see invocatio n) make: *** [Makefile:30: pngquant] Error 1


借助AI,推荐使用 atomcode + deepSeek

小模型也能写出大工程——AtomCode(ClaudeCode国产替代) 的介绍及使用


正确的脚本:

#!/bin/bashexportPNGQUANT_INSTALL_HNP_PATH=${HNP_PUBLIC_PATH}/pngquant.org/pngquant_2.18.0makedistclean||makeclean# 设置依赖的libpng路径(注,编译该库前确保libpng已编译)LIBPNG_PATH=${HNP_PUBLIC_PATH}/libpng.org/libpng_1.8.0ZLIB_PATH=${HNP_PUBLIC_PATH}/zlib.org/zlib_1.3.1# 编译安装PNGQUANTmkdir-p${PNGQUANT_INSTALL_HNP_PATH}# 从 exports.sh 继承的 LDFLAGS 包含 -Wc,--target=aarch64-linux-ohos# 该标志仅用于编译器,链接阶段应移除,避免 clang 对目标架构判断混乱# 重整 LDFLAGS:保留 --ld-path, --sysroot, -fuse-ld=lld,添加静态链接和库路径LDFLAGS_CLEAN="--ld-path=${LD}--sysroot=${SYSROOT}-fuse-ld=lld -static -L${LIBPNG_PATH}/lib -L${ZLIB_PATH}/lib"# CFLAGS 已有 --target=aarch64-linux-ohos,追加libpng/zlib头文件路径CFLAGS="${CFLAGS:-}-I${LIBPNG_PATH}/include -I${ZLIB_PATH}/include"# 设置 PKG_CONFIG_PATH 让 configure 通过 pkg-config 找到交叉编译的 aarch64 zlib# 清空 PKG_CONFIG_SYSROOT_DIR 防止 pkg-config 在路径前误加 sysroot 前缀exportPKG_CONFIG_PATH="${ZLIB_PATH}/share/pkgconfig"exportPKG_CONFIG_SYSROOT_DIR=""exportZLIB_LIBS="-L${ZLIB_PATH}/lib -lz"exportZLIB_CFLAGS="-I${ZLIB_PATH}/include"./configure --with-libpng="$LIBPNG_PATH"\--disable-sse\--extra-cflags="$CFLAGS"\--extra-ldflags="$LDFLAGS_CLEAN"\CC="$CC"\CFLAGS="$CFLAGS"\LDFLAGS="$LDFLAGS_CLEAN"\--prefix=${PNGQUANT_INSTALL_HNP_PATH}# make 时覆盖 LDFLAGS,确保使用正确的交叉编译静态库而非宿主机的 x86_64 库makeVERBOSE=1-j$(nproc)makeinstall# 生成鸿蒙HNP软件包cphnp.json${PNGQUANT_INSTALL_HNP_PATH}/pushd${PNGQUANT_INSTALL_HNP_PATH}/../${HNP_TOOL}pack-i${PNGQUANT_INSTALL_HNP_PATH}-o${ARCHIVE_PATH}/tar-zvcf${ARCHIVE_PATH}/ohos_pngquant_2.18.0.tar.gz pngquant_2.18.0/popd


构建产物的位置:

2.3 x86_64上的鸿蒙PC容器中验证

参考博文:低成本搭建鸿蒙PC运行环境:基于 Docker 的 x86_64 服务器

cd/data/service/hnp/pngquant.org/pngquant_2.18.0/#拷贝进鸿蒙PC容器dockercppngquant ohos:root#进入ohos pc容器dockerexec-itohossh#验证测试命令行应用cd/root#验证可执行文件./pngquant--version

方案二 使用lycium_plusplus编译框架

lycium_plusplus是什么?

lycium_plusplus 是一个专为 OpenHarmony 及鸿蒙 PC 环境设计的 C/C++ 编译框架,主要用于简化三方库的编译、构建和打包流程。它基于 lycium 编译框架进行增强,支持一键构建依赖关系树,并提供对多版本库的编译能力,尤其适用于在鸿蒙 PC 系统上移植和编译命令行工具或库文件(如 tree、x264 等)。

主要特性:

一键构建依赖:自动解析并构建项目依赖关系,无需手动配置复杂编译流程。
支持外部仓适配:通过 outerrepo/module.json 配置外部代码仓库(如 Git 仓库),实现独立发布和动态集成。

生成 HNP 包:支持生成 .hnp 格式的鸿蒙系统打包文件,便于作为组件与应用一同安装。
跨平台编译:支持在 Linux(如 Ubuntu)、Windows、macOS 上进行交叉编译,生成适用于鸿蒙 PC(ARM64 架构)的可执行程序。
本机编译支持:鸿蒙 PC 系统升级至 6.0.0.115 或以上版本后,可直接在设备上使用 build_local.sh 脚本进行本机编译,无需交叉编译环境。

下载lycium_plusplus:

gitclone https://atomgit.com/OpenHarmonyPCDeveloper/lycium_plusplus.git


使用举例:

cdlyium ./build.sh tree

获取编译产物

可在lycium/usr/tree/下获取对应架构下的二进制产物
可在lycium/output/下获取对应架构下的归档产物

结果验证

构建成功后,可在以下路径找到产物:

可执行程序:usr/tree/arm64-v8a/bin/tree

HNP 打包文件:output/arm64-v8a/tree.hnp

外部适配仓参与构建:

本项目新增目录external_deps用于临时存放外部仓,外部仓信息存放在external_deps/module.json中
该文件中包含的关键要素如下:

"module":[{"name":"tree","branch":"ohos_2.2.1","version":"2.2.1","type":"git","url":"https://gitcode.com/OpenHarmonyPCDeveloper/ohos_tree.git"}]

使用此方式编译pngquant:

详见博文:HarmonyOS / OpenHarmony 鸿蒙PC平台三方库移植:使用 Lycium 移植 pngquant 的实践总结

方案三 使用vcpkg构建鸿蒙三方库

参考博文:使用 vcpkg 为鸿蒙(HarmonyOS / OHOS)下载与安装三方库实践指南

使用 vcpkg 将 pngquant 命令行移植到鸿蒙 PC

vcpkg (针对 C++ 库的包管理):虽然它最初是c/c++的包管理器,但它的 triplet 机制(如当前的 arm64-ohos)本质上也是一种轻量级的交叉编译配置框架

vcpkg鸿蒙仓地址:https://atomgit.com/OpenHarmonyPCDeveloper/ohos_vcpkg

使用环境:linux_x86_64

gitclone https://atomgit.com/OpenHarmonyPCDeveloper/ohos_vcpkg.git


使用举例:

# 1.设置OHOS_SDK_ROOT环境变量exportOHOS_SDK_ROOT=/root/ohos-sdk/linux/# 2.开始使用cdohos_vcpkg# 开始构建vcpkginstall--tripletarm64-ohos libpng libjpeg-turbo#或者vcpkginstalllibpng:arm64-ohos libjpeg-turbo:arm64-ohos

方案四 使用AI自动化编译框架build_in_harmonyos框架

参考博文:HarmonyOS / OpenHarmony 鸿蒙PC平台三方库移植:AI自动化编译框架build_in_harmonyos介绍及使用

当前该项目仅支持在鸿蒙PC上使用(注意该限制条件)。

该项目通过AI技术实现"编一次、记一次、下次更快"的流水线作业,将补丁、错误对策等经验转化为可复用的知识图谱。主要包含两个仓库:build_in_harmonyos(编译框架和知识档案)和cmd-pkgs(预编译包分发)。用户可通过自然语言指令让AI Agent完成软件编译全过程,目前已支持394个软件沉淀。

build_in_harmonyos 的亮点不在于「又多了一个构建脚本,除了前面介绍过的lycim和vcpkg等框架」,而在于三件事同时成立:流程一体化、路径与打包Engineering、错误与经验资产化。借助AI的能力,让三方库软件移植变得如此简单!即便是小白用户也能通过简单的语言描述完成移植,凸显在整个 OpenHarmony PC 生态里的价值。

项目的思路和方法非常不错,值得借鉴!相当于它有了自动进化的能力,用的人越多它越强,贡献越大!

该项目确实非常有启发性。它最核心的魅力在于将 AI 的推理能力与结构化的工程知识(知识图谱) 结合,实现了从“人工搬砖”到“机器自我进化”的跨越。

使用方式:一句话完成三方库或命令行软件移植。

参考链接

http://www.171host.com/147181.html
https://atomgit.com/OpenHarmonyPCDeveloper/build
https://atomgit.com/openharmony/startup_appspawn/tree/master/service/hnp
https://developer.huawei.com/consumer/cn/

更多分享请访问:猫哥的博客

欢迎加入鸿蒙PC开发者社区,共同打造开发者工具生态: 鸿蒙PC开发者社区

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

华侨城 Oracle EBS 会计科目表(COA)段结构深度拆解

华侨城 Oracle EBS 会计科目表&#xff08;COA&#xff09;段结构深度拆解核心结论&#xff1a;华侨城 EBS 总账 COA 为标准 8 段式弹性域结构&#xff08;6 核心段 2 预留扩展段&#xff09;&#xff0c;是国内地产文旅央企 EBS 标杆级设计&#xff0c;段顺序、限定词、长度、…

作者头像 李华
网站建设 2026/5/20 17:51:23

【CV】ViT

一、ViT 的主要版本概览 自 2020 年 Google Brain 提出原始 ViT 以来&#xff0c;该系列已经发展出众多变体。主要版本包括&#xff1a;原始 ViT、DeiT、Swin Transformer、BEiT、MAE、DINOv2、Swin V2、SAM 中的 ViT 骨干、ViT-22B 等。下面逐一介绍。二、各版本网络架构详解 …

作者头像 李华