鸿蒙 PC 命令行工具迁移实战 · 四种命令行移植方案详解及对比
鸿蒙 PC 命令行工具及三方库移植如此简单。本文以pngquant命令行移植为实战演示详细介绍移植pngquant命令行到鸿蒙PC的四种实现方案及对比。从环境搭建到最终的移植产物验证系统性详解并且可以借助AI的能力没有移植不了的库。只要这个库能移植这个库肯定能移植移植就是这么简单。鸿蒙 PC 命令行工具迁移实战 · 直播PPT文章目录移植方案总览对照表社区引导一 、编译环境搭建1.1 环境准备Ubuntu 24.041.2下载配置ohos-sdk1.3 源码获取二、四种编译方案的使用对比 (手动交叉编译 / Lycium/ vcpkg-ohos /build_in_harmonyos )方案一 手动交叉编译2.1 编译环境脚本exports.sh2.2 构建脚本build_ohos.sh2.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读写 PNGzlib压缩数据流lcms2色彩管理ICC 等对应 configure 的--with-lcms2源码默认从GitHub拉取指定 tag本适配为2.18.0且需git clone --recursive以便带上lib/下的libimagequant子模块pngquant 会静态链接该库。移植方案总览对照表方式核心抽象适合场景长处短处原始工具链直接交叉编译手搓 flags极简项目 / 教学演示掌控力强依赖多时脚本难维护LyciumHPKBUILD 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.04sudoaptupdatesudoaptinstall-ygitcurlcmake ninja-build gcc gmakeautoconf automake libtool yasm nasmsudoaptinstall-ygettext autopointsudoaptinstallpython3 python3-pipsudoupdate-alternatives--install/usr/bin/python python /usr/bin/python311.2下载配置ohos-sdk工具链的获取渠道OpenHarmony SDK 的官方获取渠道有两处OpenHarmony 社区 Release 文档 每当 OpenHarmony 系统发布一个新的 Release 版本社区都会为其提供一个 Release 文档里面不仅提供了归档好的系统源码和系统镜像包下载链接同样提供了配套的 OpenHarmony SDK 下载链接。OpenHarmony 社区流水线 从社区流水线中不仅可以下载到正式的 Release 版本产物还可以下载到任意一天的日构建产物。如果你不知道选哪个产物可以这么选交叉编译选 ohos-sdk-full原生编译选 ohos-sdk-public_ohos。sdk_download_urlhttps://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.gzcurl-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#includestdio.hintmain(){printf(Hello, HongMeng PC!\n);return0;}使用 ohos-sdk 中的编译器进行交叉编译并签名clang--targetaarch64-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 上可正常运行chmodx 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.shsourceexports.sh使用猫哥提供的通用脚本exports.sh用于一键配置交叉编译环境。更多移植教程参见猫哥个人博客(blog.csdn.net/qq8864)echohello exports,交叉编译环境配置## SDK路径你唯一需要根据实际的改的地方SDK_PATH/root/ohos-sdk/linuxechoSDK_PATH:$SDK_PATHexportOHOS_SDK$SDK_PATHexportHNP_PERFIXexportCOMPILER_TOOLCHAIN${OHOS_SDK}/native/llvm/bin/BUILD_OS$(uname)PYTHON$(python--version)echopython :$PYTHONexportCC${COMPILER_TOOLCHAIN}clangechoCC :${CC}exportCXX${COMPILER_TOOLCHAIN}clangechoCXX :${CXX}exportHOSTCC${CC}echoHOSTCC :${HOSTCC}exportHOSTCXX${CXX}echoHOSTCXX :${HOSTCXX}exportCPP${CXX}-EechoCPP :${CPP}exportAS${COMPILER_TOOLCHAIN}llvm-asechoAS :${AS}exportLD${COMPILER_TOOLCHAIN}ld.lldechoLD :${LD}exportSTRIP${COMPILER_TOOLCHAIN}llvm-stripechoSTRIP :${STRIP}exportRANLIB${COMPILER_TOOLCHAIN}llvm-ranlibechoRANLIB :${RANLIB}exportOBJDUMP${COMPILER_TOOLCHAIN}llvm-objdumpechoOBJDUMP :${OBJDUMP}exportOBJCOPY${COMPILER_TOOLCHAIN}llvm-objcopyechoOBJCOPY :${OBJCOPY}exportNM${COMPILER_TOOLCHAIN}llvm-nmechoNM :${NM}exportAR${COMPILER_TOOLCHAIN}llvm-arechoAR :${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_PLATFORMaarch64-linux-ohosexportTARGETaarch64-linux-ohosexportCFLAGS-fPIC -D__MUSL__1 -D__OHOS__ -fstack-protector-strong --target${TARGET_PLATFORM}--ld-path${LD}--sysroot${SYSROOT}-stdliblibc exportCXXFLAGS${CFLAGS}exportLD_LIBRARY_PATH${SYSROOT}/usr/lib:${LD_LIBRARY_PATH}exportLDFLAGS--ld-path${LD}-Wc,--target${TARGET_PLATFORM}--sysroot${SYSROOT}-fuse-ldlld exportHOST_TYPE--hostaarch64-linux --buildaarch64-linux#export NCURSES_INSTALL_HNP_PATH${HNP_PUBLIC_PATH}/ncurses.org/ncurses_v6.4mkdir-p${HNP_PUBLIC_PATH}mkdir-p${ARCHIVE_PATH}chmod777-R${HNP_PUBLIC_PATH}mkdir-pcodeechoLDFLAGS:${LDFLAGS}#export PKG_CONFIG_PATH${CUSTOM_PREFIX}/lib/pkgconfig:$PKG_CONFIG_PATH2.2 构建脚本build_ohos.shhttps://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}/includeLDFLAGS${LDFLAGS:-}-static -L${LIBPNG_PATH}/lib -L${ZLIB_PATH}/libCXXFLAGS${CFLAGS}exportPKG_CONFIG_LIBDIR${pkgconfigpath}exportZLIB_LIBS-L${ZLIB_PATH}/lib -lzexportZLIB_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}makeVERBOSE1-j$(nproc)ZLIBFLAGS-I${ZLIB_PATH}/includeLIBS-L${LIBPNG_PATH}/lib -lpng -L${ZLIB_PATH}/lib${ZLIB_PATH}/lib/libz.a -lmmakeinstall# 生成鸿蒙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小模型也能写出大工程——AtomCodeClaudeCode国产替代 的介绍及使用正确的脚本#!/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,--targetaarch64-linux-ohos# 该标志仅用于编译器链接阶段应移除避免 clang 对目标架构判断混乱# 重整 LDFLAGS保留 --ld-path, --sysroot, -fuse-ldlld添加静态链接和库路径LDFLAGS_CLEAN--ld-path${LD}--sysroot${SYSROOT}-fuse-ldlld -static -L${LIBPNG_PATH}/lib -L${ZLIB_PATH}/lib# CFLAGS 已有 --targetaarch64-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/pkgconfigexportPKG_CONFIG_SYSROOT_DIRexportZLIB_LIBS-L${ZLIB_PATH}/lib -lzexportZLIB_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 库makeVERBOSE1-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 上进行交叉编译生成适用于鸿蒙 PCARM64 架构的可执行程序。本机编译支持鸿蒙 PC 系统升级至 6.0.0.115 或以上版本后可直接在设备上使用 build_local.sh 脚本进行本机编译无需交叉编译环境。下载lycium_plusplusgitclone https://atomgit.com/OpenHarmonyPCDeveloper/lycium_plusplus.git使用举例cdlyium ./build.sh tree获取编译产物可在lycium/usr/tree/下获取对应架构下的二进制产物可在lycium/output/下获取对应架构下的归档产物结果验证构建成功后可在以下路径找到产物可执行程序usr/tree/arm64-v8a/bin/treeHNP 打包文件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 命令行移植到鸿蒙 PCvcpkg (针对 C 库的包管理)虽然它最初是c/c的包管理器但它的 triplet 机制如当前的 arm64-ohos本质上也是一种轻量级的交叉编译配置框架。vcpkg鸿蒙仓地址https://atomgit.com/OpenHarmonyPCDeveloper/ohos_vcpkg使用环境linux_x86_64gitclone 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.htmlhttps://atomgit.com/OpenHarmonyPCDeveloper/buildhttps://atomgit.com/openharmony/startup_appspawn/tree/master/service/hnphttps://developer.huawei.com/consumer/cn/更多分享请访问猫哥的博客欢迎加入鸿蒙PC开发者社区共同打造开发者工具生态 鸿蒙PC开发者社区