【鸿蒙PC命令行移植适配】rsync 三方库鸿蒙化适配后在鸿蒙PC运行的完整实践
欢迎加入开源鸿蒙跨平台开发者社区与大家一起共建鸿蒙化 C/C 三方库生态。1. 前言本教程面向C/C 开发者带你完成rsync 三方库的鸿蒙平台适配并能够在鸿蒙PC上进行验证。通过本教程你将掌握使用 lycium 框架进行交叉编译配置处理 autoconf 库的特殊构建需求解决交叉编译中的常见问题生成 HNP 格式分发包前置准备环境参考【在 Ubuntu 中搭建鸿蒙 PC 三方库交叉编译构建开发环境】从零搭建环境基础熟悉 C/C 交叉编译概念、shell 脚本基础目标平台鸿蒙PC源代码仓库地址https://github.com/RsyncProject/rsync适配完成仓库地址https://atomgit.com/unisources/rsync2. 前置准备2.1 环境验证打开宿主机终端窗口输入以下命令验证环境。# 验证环境变量echo$OHOS_SDKecho$HNP_TOOL# 验证工具链ls$OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang2.2 源码信息pkgnamersyncpkgverv3.4.1sourcehttps://github.com/RsyncProject/rsyncbuildtoolsconfigure makelicenseGPL-3.0-or-later3. 实战步骤步骤1创建目录结构操作目的为 rsync 建立标准的适配仓结构cd/home/lycium_plusplus/thirdpartymkdir-prsynccdrsync避坑点目录名必须与pkgname一致步骤2编写 HPKBUILD 配置文件操作目的定义交叉编译的完整构建流程创建rsync/HPKBUILDcd/home/lycium_plusplus/thirdparty/rsyncmkdirHPKBUILD# Copyright (c) 2026 unisources# Licensed under the Apache License, Version 2.0 (the License);# you may not use this file except in compliance with the License.# You may obtain a copy of the License at## http://www.apache.org/licenses/LICENSE-2.0## Unless required by applicable law or agreed to in writing, software# distributed under the License is distributed on an AS IS BASIS,# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.# See the License for the specific language governing permissions and# limitations under the License.# Contributor: allincoding 3384684593qq.com# Maintainer: allincoding 3384684593qq.compkgnamersyncpkgverv3.4.1pkgrel0pkgdescrsync is a file transfer program for Unix systemsurlhttps://rsync.samba.org/archs(armeabi-v7aarm64-v8a)license(GPL-3.0-or-later)depends()makedepends(autoconfautomake)sourcehttps://github.com/RsyncProject/rsync.gitdownloadpackagefalseautounpackfalsebuildtoolsconfigurebuilddir$pkgname-${pkgver}packagenamecloneFlagtrueprepare(){if$cloneFlag;thengitclone-b$pkgver$source$builddircd$builddir# 使用 autoreconf 生成 configureautoreconf-fi# 关键创建 configure.sh 避免 make 时重新生成cpconfigure configure.shcloneFlagfalsecd$OLDPWDfimkdir-p$builddir/$ARCH-build}build(){cd$builddir/$ARCH-build# 设置交叉编译工具链if[$ARCHarmeabi-v7a];thenexportCC${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clangexportCXX${OHOS_SDK}/native/llvm/bin/arm-linux-ohos-clangexportAR${OHOS_SDK}/native/llvm/bin/llvm-arexportRANLIB${OHOS_SDK}/native/llvm/bin/llvm-ranlibexportLD${OHOS_SDK}/native/llvm/bin/ld.lldexportCFLAGS-DOHOS_NDK -fPIC -marcharmv7a -D__MUSL__1exportCXXFLAGS-DOHOS_NDK -fPIC -marcharmv7a -D__MUSL__1exportLDFLAGShostarm-linuxfiif[$ARCHarm64-v8a];thenexportCC${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clangexportCXX${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clangexportAR${OHOS_SDK}/native/llvm/bin/llvm-arexportRANLIB${OHOS_SDK}/native/llvm/bin/llvm-ranlibexportLD${OHOS_SDK}/native/llvm/bin/ld.lldexportCFLAGS-DOHOS_NDK -fPIC -D__MUSL__1 -D__OHOS__exportCXXFLAGS${CFLAGS}exportLDFLAGS--targetaarch64-linux-ohos --sysroot${SYSROOT}hostaarch64-linuxfiexportPATH${OHOS_SDK}/native/llvm/bin:$PATHPKG_CONFIG_LIBDIR${pkgconfigpath}\ac_cv_func_strverscmpyes\../configure\--host$host\--prefix$LYCIUM_ROOT/usr/$pkgname/$ARCH\--with-included-poptyes\--disable-md2man\--disable-xxhash\--disable-zstd\--disable-lz4\--disable-openssl\--disable-simd\CC${CC}\$buildlog21ret$?[$ret-ne0]cd$OLDPWDreturn$ret$MAKE$buildlog21ret$?cd$OLDPWDreturn$ret}package(){cd$builddir/$ARCH-build$MAKEinstall$buildlog21cd$OLDPWD}archive(){mkdir-p${LYCIUM_ROOT}/output/$ARCHpushd$LYCIUM_ROOT/usr/$pkgname/$ARCHtar-zvcf${LYCIUM_ROOT}/output/$ARCH/${pkgname}_${pkgver}.tar.gz *popdcphnp.json$LYCIUM_ROOT/usr/$pkgname/$ARCH${OHOS_SDK}/toolchains/hnpcli pack-i${LYCIUM_ROOT}/usr/$pkgname/$ARCH-o${LYCIUM_ROOT}/output/$ARCH/}check(){echoThe test must be on an OpenHarmony device!}cleanbuild(){rm-rf${PWD}/$builddir}步骤3编写 HPKCHECK测试用例配置文件操作目的定义测试用例执行入口创建rsync/HPKCHECKcd/home/lycium_plusplus/thirdparty/rsyncmkdirHPKCHECKsourceHPKBUILD/dev/null21# 导入HPKBUILD文件logfile${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log# 测试前的准备, 如果不需要可以不写。checkprepare(){return0}# 在OH环境执行测试的接口openharmonycheck(){res0# 记录返回值cd$builddir-$ARCH-build# 进入到测试目录maketest${logfile}21if[$?-ne0];thencd$OLDPWDreturn$resficd$OLDPWD# 返回上一次目录return$res# 返回测试值}步骤4创建 hnp.json操作目的定义 HNP 打包元数据创建rsync/hnp.jsoncd/home/lycium_plusplus/thirdparty/rsyncmkdirhnp.json{type:hnp-config,name:rsync,version:v3.4.1,install:{}}步骤5创建 README 文档和开源说明文档创建rsync/README_zh.mdcd/home/lycium_plusplus/thirdparty/rsyncmkdirREADME_zh.md# rsync三方库说明 ## 功能简介 rsync 是一个 Unix 系统的文件传输工具由 Andrew Tridgell 开发。它使用高效的增量传输算法可以快速同步本地和远程文件支持压缩、加密、保留权限等功能。 ## 三方库版本 - v3.4.1创建rsync/README.OpenSourcecd/home/lycium_plusplus/thirdparty/rsyncmkdirREADME.OpenSource{Name:rsync,License:GPL-3.0-or-later,License File:COPYING,Version Number:v3.4.1,Owner:allincoding,Upstream URL:https://github.com/RsyncProject/rsync,Description:rsync is a file transfer program for Unix systems}步骤6执行编译构建操作目的验证 HPKBUILD 配置正确性cd/home/lycium_plusplus/lycium ./build.shrsync步骤7排查编译错误问题1configure 脚本不存在解决使用autoreconf -fi生成cd$builddirautoreconf-fi问题2交叉编译工具链未生效解决显式设置所有工具链环境变量exportCC${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clangexportCXX${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clang# ... 其他变量问题3缺少 openssl/xxhash/zstd 等依赖解决使用--disable-*选项禁用可选功能../configure\--disable-openssl\--disable-xxhash\--disable-zstd\--disable-lz4问题4make 时重新生成 configure 失败解决预先创建 configure.shautoreconf-ficpconfigure configure.sh问题5HNP_TOOL 变量未展开解决使用完整路径${OHOS_SDK}/toolchains/hnpcli pack...步骤7验证构建产物操作目的确认编译成功# 检查安装目录cd/home/lycium_plusplus/lycium/usr/rsync tree步骤8验证 HNP 包# 检查 HNP 包cd/home/lycium_plusplus/lycium/output tree4. 成果验证参考开源鸿蒙PC构建终端工具Termony增加外部HNP包合入base.hnp的设计与实现实战教程将nanomsg.hnp集成到Termony开源项目中在鸿蒙PC上运行Termony程序。在打开的Termony终端窗口输入nanocat -h命令查看是否能够打印以下帮助信息可以打印表示适配成功。5. 进阶拓展5.1 支持静态编译如需静态链接可添加exportLDFLAGS-static${LDFLAGS}5.2 相关资源rsync 官方仓库三方库鸿蒙化适配框架在 Ubuntu 中搭建鸿蒙 PC 三方库交叉编译构建开发环境6. 总结与注意事项核心要点镜像源GitHub 超时时用 gitee 镜像autoconf 库需要autoreconf -fi生成 configureconfigure.sh预先复制避免 make 重新生成显式工具链不要依赖source envset.sh直接设置 CC/CXX/AR可选依赖用--disable-*禁用不需要的依赖HNP_TOOL使用完整路径避免变量未展开问题常见避坑场景避坑方案网络超时使用 gitee 镜像SHA512SUM 校验设置downloadpackagefalseautoreconf 问题预先创建 configure.sh工具链失效显式设置所有变量依赖缺失使用--disable-*禁用可选功能
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2441984.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!