OpenHarmony 交叉编译环境 libsmb2 库

为 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. 创建库目录

bash 复制代码
mkdir -p community/libsmb2

2. 编写 HPKBUILD

在 community/libsmb2/HPKBUILD 中定义以下内容:

bash 复制代码
# 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() 清理编译产物

构建流程

  1. 环境变量 : 编译前需设置 OHOS_SDK 环境变量,指向 OpenHarmony SDK 路径:
bash 复制代码
export OHOS_SDK=/path/to/ohos/sdk
  1. 编译单个库:
bash 复制代码
cd lycium && bash build.sh ../community/libsmb2

编译产物

编译完成后,会在 lycium/usr/libsmb2/{arch}/ 目录下生成对应的库文件(如 liblibsmb2.so)。

复制代码
arm64-v8a       armeabi-v7a     x86_64

注意事项

  1. 网络环境: GitHub 直连可能受限,可通过代理或镜像源下载源码
  2. CMake 工具链 : build_hpk.sh 会自动传入 -DCMAKE_TOOLCHAIN_FILE=${OHOS_SDK}/native/build/cmake/ohos.toolchain.cmake 用于交叉编译
  3. 依赖顺序 : 如果 libsmb2 依赖其他库(如 openssl),需在 depends 中声明,构建系统会自动处理编译顺序
  4. 安装路径 : 编译产物默认安装到 lycium/usr/libsmb2/{arch}/ 目录下

参考文档

参考文档:libsmb2

相关推荐
贾伟康13 小时前
HarmonyOS API 26 DevEco Code 需求到 ArkTS 骨架的提示词分层
harmonyos·arkts·ai coding·deveco code·工程提效
威哥爱编程13 小时前
模拟面试智能体开发实战 02:回答等半分钟,谁还愿意练?把服务端和流式输出搭起来
python·agent·harmonyos
威哥爱编程14 小时前
模拟面试智能体开发实战 01:面试挂了都不知道挂在哪?用 Python 给自己造一个随叫随到的 AI 面试官
python·agent·harmonyos
贾伟康18 小时前
HarmonyOS API 26 HMAF Skill 可解释任务计划与失败回退
harmonyos·arkts·智能体·skill·hmaf
贾伟康18 小时前
HarmonyOS API 26 HMAF 2.0 意图解析的可解释动作图
harmonyos·arkts·智能体·a2a·hmaf
KevinChaos20 小时前
阳台小花园开发手记 03|HarmonyOS 7.0 互动卡片:叶片伸出边框仍与花盆对齐
华为·harmonyos
熬夜磕代码丶21 小时前
RN鸿蒙空间音频实战
华为·音视频·harmonyos
行者-全栈开发1 天前
【鸿蒙心迹】通知与推送集成——emitter 本地通知与推送服务全链路(HarmonyOS 7.x)
华为·harmonyos
Nerd(BUG版)1 天前
鸿蒙API18~26新增V2组件全解析
microsoft·华为·harmonyos
贾伟康1 天前
HarmonyOS API 26 Navigation 菜单项刷新态:stale 数据、重试与一致性
harmonyos·arkts·arkui·navigation·多设备