欢迎加入开源鸿蒙跨平台开发者社区与大家一起共建鸿蒙化 C/C 三方库生态。1. 前言本教程面向C/C 开发者带你完成nanomsg 三方库的鸿蒙平台适配并能够在鸿蒙PC上进行验证。通过本教程你将掌握使用 lycium 框架进行交叉编译配置处理 cmake 库的特殊构建需求解决交叉编译中的常见问题生成 HNP 格式分发包前置准备环境【在 Ubuntu 中搭建鸿蒙 PC 三方库交叉编译构建开发环境】基础熟悉 C/C 交叉编译概念、shell 脚本基础目标平台鸿蒙PC源代码仓库地址https://github.com/nanomsg/nanomsg适配完成仓库地址https://atomgit.com/unisources/nanomsg2. 前置准备2.1 环境验证打开宿主机终端窗口输入以下命令验证环境。# 验证环境变量echo$OHOS_SDKecho$HNP_TOOL# 验证工具链ls$OHOS_SDK/native/llvm/bin/aarch64-linux-ohos-clang2.2 源码信息pkgnamenanomsgpkgver1.2.2sourcehttps://github.com/nanomsg/nanomsg.gitbuildtoolscmakelicenseMIT3. 实战步骤步骤1创建目录结构操作目的为 nanomsg 建立标准的适配仓结构cd/home/lycium_plusplus/thirdpartymkdir-pnanomsgcdnanomsg避坑点目录名必须与pkgname一致步骤2编写 HPKBUILD 配置文件操作目的定义交叉编译的完整构建流程创建nanomsg/HPKBUILDcd/home/lycium_plusplus/thirdparty/nanomsgmkdirHPKBUILD# 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.compkgnamenanomsgpkgver1.2.2pkgrel0pkgdescnanomsg is a light-weight messaging libraryurlhttps://nanomsg.org/archs(armeabi-v7aarm64-v8a)license(MIT)depends()makedepends()sourcehttps://github.com/nanomsg/nanomsg.gitdownloadpackagefalseautounpackfalsebuildtoolscmakebuilddir$pkgname-$pkgverpackagenamecloneFlagtrueprepare(){if$cloneFlag;thengitclone-b${pkgver}$source$builddir/dev/null21if[$?-ne0];thenecho$pkgnamegit clone$sourceerror.return-1ficloneFlagfalsefimkdir-p$builddir/$ARCH-build}build(){cd$builddir# 设置交叉编译工具链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-ranlibexportCFLAGS-DOHOS_NDK -fPIC -marcharmv7a -D__MUSL__1exportCXXFLAGS-DOHOS_NDK -fPIC -marcharmv7a -D__MUSL__1exportLDFLAGSfiif[$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-ranlibexportCFLAGS-DOHOS_NDK -fPIC -D__MUSL__1 -D__OHOS__exportCXXFLAGS${CFLAGS}exportLDFLAGS--targetaarch64-linux-ohos --sysroot${SYSROOT}fiexportPATH${OHOS_SDK}/native/llvm/bin:$PATHPKG_CONFIG_LIBDIR${pkgconfigpath}\${OHOS_SDK}/native/build-tools/cmake/bin/cmake$\-DOHOS_ARCH$ARCH\-DCMAKE_BUILD_TYPERelease\-DNANOMSG_ENABLE_TLSOFF\-DNANOMSG_ENABLE_DOCOFF\-DNANOMSG_ENABLE_TESTSOFF\-B$ARCH-build -S./$buildlog21ret$?[$ret-ne0]cd$OLDPWDreturn$ret$MAKEVERBOSE1-C$ARCH-build$buildlog21ret$?cd$OLDPWDreturn$ret}package(){cd$builddir$MAKE-C$ARCH-buildinstall$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 测试用例配置文件操作目的定义测试用例执行入口创建nanomsg/HPKCHECKcd/home/lycium_plusplus/thirdparty/nanomsgmkdirHPKCHECKsourceHPKBUILD/dev/null21# 导入HPKBUILD文件logfile${LYCIUM_THIRDPARTY_ROOT}/${pkgname}/${pkgname}_${ARCH}_${OHOS_SDK_VER}_test.log# 测试前的准备, 如果不需要可以不写。checkprepare(){return0}# 在OH环境执行测试的接口openharmonycheck(){res0# 记录返回值cd${builddir}/${ARCH}-build# 进入到测试目录ctest${logfile}21# 执行测试命令res$?cd$OLDPWD# 返回上一次目录return$res# 返回测试值}步骤4创建 hnp.json操作目的定义 HNP 打包元数据创建nanomsg/hnp.jsoncd/home/lycium_plusplus/thirdparty/nanomsgmkdirhnp.json{type:hnp-config,name:nanomsg,version:1.2.2,install:{}}步骤5创建 README 文档和开源说明文档创建nanomsg/README_zh.mdcd/home/lycium_plusplus/thirdparty/nanomsgmkdirREADME_zh.md# nanomsg三方库说明## 功能简介nanomsg 是一个轻量级的高性能消息通信库提供了多种通信模式pair、reqrep、pubsub、pipeline、survey、bus用于构建分布式系统。## 三方库版本-1.2.2创建nanomsg/README.OpenSourcecd/home/lycium_plusplus/thirdparty/nanomsgmkdirREADME.OpenSource{Name:nanomsg,License:MIT,License File:LICENSE,Version Number:1.2.2,Owner:allincoding,Upstream URL:https://github.com/nanomsg/nanomsg,Description:nanomsg is a light-weight messaging library}步骤6执行编译构建操作目的验证 HPKBUILD 配置正确性cd/home/lycium_plusplus/lycium ./build.sh nanomsg步骤7排查编译错误问题1CMake 找不到交叉编译工具解决显式设置 CC、CXX、AR 等环境变量exportCC${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clangexportCXX${OHOS_SDK}/native/llvm/bin/aarch64-linux-ohos-clangexportPATH${OHOS_SDK}/native/llvm/bin:$PATH步骤8验证构建产物操作目的确认编译成功# 检查安装目录cd/home/lycium_plusplus/lycium/usr/nanomsg tree步骤9验证 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 启用 TLS 支持如需要nanomsg 支持 TLS 加密通信但需要 NSS 库支持。如需启用# 在 cmake 配置中添加-DNANOMSG_ENABLE_TLSON# 并确保 NSS 库已适配5.2 相关资源nanomsg 官方仓库nanomsg 官方文档三方库鸿蒙化适配框架在 Ubuntu 中搭建鸿蒙 PC 三方库交叉编译构建开发环境6. 总结与注意事项核心要点git cloneGitHub 下载不稳定时使用 git clone分支名nanomsg 分支名不带v前缀cmake 配置显式设置工具链环境变量禁用特性TLS/DOC/TESTS 可根据需求禁用HNP 打包使用 archive 函数自动生成