首先下载libssh2源码

simon@U-PD23M24Q-1838 Custom % git clone https://github.com/libssh2/libssh2

 由于鸿蒙的systomroot中没有内置OpenSSL加密库,所以需要指定一个 ,这里采用 WolfSSL作为加密后端(libssh2官方支持,且适配性更好)

下载WolfSSL源码

simon@U-PD23M24Q-1838 Custom % git clone https://github.com/wolfSSL/wolfssl.git
simon@U-PD23M24Q-1838 Custom % cd wolfssl
# 切换到稳定版本(如5.6.0)
simon@U-PD23M24Q-1838 Custom % git checkout v5.6.0-stable

创建 WolfSSL 的鸿蒙交叉编译配置文件

在 wolfssl 源码根目录创建harmonyos.toolchain.cmake,内容如下(替换<鸿蒙SDK路径>为实际路径): /Users/simon/Library/OpenHarmony/Sdk/12/native

set(CMAKE_SYSTEM_NAME HarmonyOS)
set(CMAKE_SYSTEM_PROCESSOR aarch64)

# 鸿蒙工具链路径  # 例如:/Users/simon/Library/OpenHarmony/Sdk/12/native
set(HARMONYOS_SDK "<鸿蒙SDK路径>/native")  
set(TOOLCHAIN_BIN "${HARMONYOS_SDK}/llvm/bin")

# 指定编译器
set(CMAKE_C_COMPILER "${TOOLCHAIN_BIN}/clang")
set(CMAKE_CXX_COMPILER "${TOOLCHAIN_BIN}/clang++")

# 目标架构和系统根目录
set(CMAKE_C_FLAGS "-target aarch64-linux-ohos -march=armv8-a -fPIC")
set(CMAKE_SYSROOT "${HARMONYOS_SDK}/sysroot")

# WolfSSL配置:启用libssh2兼容模式,禁用冗余功能
set(WOLFSSL_DISABLE_TESTS ON)          # 禁用测试
set(WOLFSSL_LIBSSH2 ON)                # 启用对libssh2的支持
set(ENABLE_OPENSSL_COMPAT ON)          # 兼容OpenSSL接口(libssh2依赖)
set(NO_MD4 ON)                         # 禁用不安全算法
set(NO_HC128 ON)
set(BUILD_SHARED_LIBS OFF)             # 静态编译(避免鸿蒙缺动态库)

编译并安装WolfSSL

# 创建构建目录
simon@U-PD23M24Q-1838 wolfssl % mkdir build_harmony && cd build_harmony
# 配置CMake(使用上述工具链文件)
simon@U-PD23M24Q-1838 build_harmony % cmake .. -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \
         -DCMAKE_INSTALL_PREFIX=./output  # 安装到当前目录的output文件夹
# 配置Cmake 执行如下命令
simon@U-PD23M24Q-1838 build_harmony % cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \
  -DCMAKE_INSTALL_PREFIX=./output \
  -DBUILD_SHARED_LIBS=OFF \
  -DWOLFSSL_LIBSSH2=ON \
  -DENABLE_OPENSSL_COMPAT=ON \
  -DNO_MD4=ON \
  -DWOLFSSL_DISABLE_TESTS=ON

# 编译(-j4表示4线程加速)
simon@U-PD23M24Q-1838 build_harmony % make -j4
# 安装(生成头文件和库文件)
simon@U-PD23M24Q-1838 build_harmony % make install

验证是否Cmake 显示指定关键选项 

WOLFSSL_LIBSSH2:BOOL=ON ENABLE_OPENSSL_COMPAT:BOOL=ON

grep -E "WOLFSSL_LIBSSH2|ENABLE_OPENSSL_COMPAT" /Users/simon/Custom/wolfssl/build_harmony/CMakeCache.txt

#输出如下才正确
WOLFSSL_LIBSSH2:BOOL=ON
ENABLE_OPENSSL_COMPAT:BOOL=ON

验证产物

验证:进入build_harmony/output目录,确认存在:

  • include/wolfssl/:头文件(如ssl.h
  • lib/libwolfssl.a:静态库(核心文件)

 libssh2 链接 WolfSSL

操作目标:配置libssh:2的编译参数,使其使用步骤2编译的WolfSSL。
进入libssh2的编译目录(假设之前已创建ouild_harmony目录):

重新配置CMake (指定Wolfssl的路径)

注意: \后面不能有空格

# 替换<WolfSSL安装路径>为步骤2中WolfSSL的output目录(如../wolfssl/build_harmony/output)
cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \  # 之前创建的libssh2工具链文件
  -DBUILD_SHARED_LIBS=ON \                               # 生成libssh2.so动态库
  -DCMAKE_INSTALL_PREFIX=./output \                      # libssh2的安装路径
  -DCRYPTO_BACKEND=WolfSSL \                             # 强制使用WolfSSL
  -DWOLFSSL_ROOT_DIR="<WolfSSL安装路径>" \                # WolfSSL的根目录
  -DWOLFSSL_INCLUDE_DIR="<WolfSSL安装路径>/include" \     # WolfSSL头文件目录
  -DWOLFSSL_LIBRARY="<WolfSSL安装路径>/lib/libwolfssl.a"  # WolfSSL静态库路径

验证:CMake输出中出现--Using crypto backend:WolfSSL,表示配置成功.

正确的CMake命令格式(单行或带换行符):
方式:单行命令(推荐新手使用,避免格式错误)

方式2:多行命令(需用\连接, \后不能有空格)

cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \
  -DBUILD_SHARED_LIBS=ON \
  -DCMAKE_INSTALL_PREFIX=./output \
  -DCRYPTO_BACKEND=WolfSSL \
  
  -DWOLFSSL_ROOT_DIR="/Users/simon/Custom/wolfssl/build_harmony/output" \
  -DWOLFSSL_INCLUDE_DIR="/Users/simon/Custom/wolfssl/build_harmony/output/include" \
  -DWOLFSSL_LIBRARY="/Users/simon/Custom/wolfssl/build_harmony/output/lib/libwolfssl.a"
    
    
cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \
  -DWOLFSSL_LIBSSH2=ON \
  -DENABLE_OPENSSL_COMPAT=ON \
  -DCMAKE_INSTALL_PREFIX=./output \
  -DWOLFSSL_ROOT_DIR=/Users/simon/Custom/wolfssl/build_harmony/output \
  -DWOLFSSL_INCLUDE_DIR=/Users/simon/Custom/wolfssl/build_harmony/output/include \
  -DWOLFSSL_LIBRARY=/Users/simon/Custom/wolfssl/build_harmony/output/lib/libwolfssl.a \
  -DLIBSSH2_CRYPTO_BACKEND=wolfssl
    


cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \
  -DWOLFSSL_LIBSSH2=ON \
  -DENABLE_OPENSSL_COMPAT=ON \
  -DCMAKE_INSTALL_PREFIX=./output \
  -DCMAKE_C_FLAGS="/Users/simon/Custom/wolfssl/build_harmony/output/include" \
  -DCMAKE_EXE_LINKER_FLAGS="/Users/simon/Custom/wolfssl/build_harmony/output/lib -lwolfssl" \
  -DWOLFSSL_ROOT_DIR=/Users/simon/Custom/wolfssl/build_harmony/output \
  -DWOLFSSL_INCLUDE_DIR=/Users/simon/Custom/wolfssl/build_harmony/output/include \
  -DWOLFSSL_LIBRARY=/Users/simon/Custom/wolfssl/build_harmony/output/lib/libwolfssl.a \
  -DLIBSSH2_CRYPTO_BACKEND=wolfssl    

cmake .. \
  -DCMAKE_TOOLCHAIN_FILE=../harmonyos.toolchain.cmake \
  -DCMAKE_INSTALL_PREFIX=./output \
  -DBUILD_SHARED_LIBS=OFF \
  -DWOLFSSL_LIBSSH2=ON \
  -DENABLE_OPENSSL_COMPAT=ON \
  -DNO_MD4=ON \
  -DWOLFSSL_DISABLE_TESTS=ON

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐