OpenHarmony 交叉编译环境 libsmb2 库
本文介绍了如何在OpenHarmony交叉编译环境中添加libsmb2库。libsmb2是一个轻量级的SMB2/SMB3协议用户空间客户端库,支持多种架构。文章详细说明了基于HPKBUILD编译体系的添加步骤,包括创建库目录、编写HPKBUILD文件、定义编译函数等关键环节,并提供了编译流程说明和注意事项。通过这套方法,开发者可以方便地将libsmb2集成到OpenHarmony项目中,实现跨平台
·
为 OpenHarmony 交叉编译环境添加 libsmb2 库
概述
libsmb2 是一个 SMB2/SMB3 协议的用户空间客户端库,由 Ronald Sahlberg 开发,允许应用程序在不依赖内核 SMB 客户端的情况下访问 SMB 共享。本文介绍如何将其纳入项目的 OpenHarmony 交叉编译体系。开发环境的配置在之前的文章提到过就不再赘述。
libsmb2 简介
- 项目地址: https://github.com/sahlberg/libsmb2
- 当前版本: 6.2
- 许可证: LGPL-2.1
- 构建系统: CMake
- 依赖: 仅需标准 C 库,无第三方依赖
- 支持架构: armeabi-v7a、arm64-v8a、x86_64
项目编译体系
本项目基于 HPKBUILD(仿 Arch Linux PKGBUILD)的编译体系。核心组件:
- lycium/build.sh — 编译调度入口,自动发现
thirdparty/和community/下的库 - lycium/script/build_hpk.sh — 单库构建流程:下载 → 校验 → 解压 → prepare → build → package
- lycium/script/envset.sh — 交叉编译工具链环境变量设置(arm32/arm64/x86_64)
- HPKBUILD — 每个库的元数据和构建脚本定义文件
添加步骤
1. 创建库目录
mkdir -p community/libsmb2
2. 编写 HPKBUILD
在 community/libsmb2/HPKBUILD 中定义以下内容:
# Copyright (c) 2025 Huawei Device Co., Ltd.
# 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.
pkgname=libsmb2
pkgver=6.2
pkgrel=0
pkgdesc="SMB2/3 userspace client library"
url="https://github.com/sahlberg/libsmb2"
archs=("armeabi-v7a" "arm64-v8a" "x86_64")
license=("lgpl-2.1")
depends=()
makedepends=()
source="https://github.com/sahlberg/libsmb2/archive/refs/tags/libsmb2-${pkgver}.tar.gz"
downloadpackage=true
autounpack=true
buildtools="cmake"
# GitHub tarballs extract as repo-tag
builddir=$pkgname-libsmb2-${pkgver}
packagename=$builddir.tar.gz
source envset.sh
prepare() {
mkdir -p $builddir/$ARCH-build
}
build() {
cd $builddir
PKG_CONFIG_LIBDIR="${pkgconfigpath}" ${OHOS_SDK}/native/build-tools/cmake/bin/cmake "$@" \
-B$ARCH-build -S./ -L >> $buildlog 2>&1
$MAKE VERBOSE=1 -C $ARCH-build >> $buildlog 2>&1
ret=$?
cd $OLDPWD
return $ret
}
package() {
cd $builddir
$MAKE VERBOSE=1 -C $ARCH-build install >> $buildlog 2>&1
cd $OLDPWD
}
check() {
echo "The test must be on an OpenHarmony device!"
}
# 清理环境
cleanbuild(){
rm -rf ${PWD}/$builddir #${PWD}/$packagename
}
字段说明
| 字段 | 说明 |
|---|---|
pkgname |
库名称,用于路径和依赖引用 |
pkgver |
版本号 |
pkgrel |
包发布编号 |
archs |
目标架构数组,可选 armeabi-v7a、arm64-v8a、x86_64 |
depends |
运行时依赖(其他 HPKBUILD 的 pkgname) |
makedepends |
构建时主机工具依赖(如 cmake、autoconf) |
source |
源码下载 URL |
downloadpackage |
是否自动下载源码 |
autounpack |
是否自动解压源码包 |
buildtools |
构建系统类型,cmake 或 configure |
builddir |
解压后的源码目录名 |
packagename |
源码压缩包文件名 |
编译函数说明
| 函数 | 作用 |
|---|---|
prepare() |
在每种架构编译前执行,通常创建构建目录、设置交叉编译工具链(调用 setarm32ENV/setarm64ENV/setx86_64ENV) |
build() |
执行实际编译,使用 $buildargs(由 build_hpk.sh 根据 buildtools 自动配置) |
package() |
将编译产物安装到 $LYCIUM_ROOT/usr/$pkgname/$arch/ |
check() |
可选测试,通常仅打印提示 |
cleanbuild() |
清理编译产物 |
构建流程
- 环境变量: 编译前需设置
OHOS_SDK环境变量,指向 OpenHarmony SDK 路径:
export OHOS_SDK=/path/to/ohos/sdk
- 编译单个库:
cd lycium && bash build.sh ../community/libsmb2
编译产物
编译完成后,会在 lycium/usr/libsmb2/{arch}/ 目录下生成对应的库文件(如 liblibsmb2.so)。
arm64-v8a armeabi-v7a x86_64
注意事项
- 网络环境: GitHub 直连可能受限,可通过代理或镜像源下载源码
- CMake 工具链: build_hpk.sh 会自动传入
-DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake用于交叉编译 - 依赖顺序: 如果 libsmb2 依赖其他库(如 openssl),需在
depends中声明,构建系统会自动处理编译顺序 - 安装路径: 编译产物默认安装到
lycium/usr/libsmb2/{arch}/目录下
参考文档
参考文档:libsmb2
更多推荐

所有评论(0)