

























libsodium 是一个现代、易用、且极其安全的软件库,用于加密、解密、签名、密码哈希等安全操作。
下载地址:https://download.libsodium.org/libsodium/releases/LATEST.tar.gz
华为开发者联盟下载Command Line Tools 5.1.1 Release(包含了sdk):https://developer.huawei.com/consumer/cn/download/
设置编译工具链
这两个环境变量主要用于 交叉编译(cross-compiling),也就是在一个平台上编译目标平台的代码。具体作用如下:
CC
export CC="/root/harmony/command-line-tools/sdk/default/openharmony/native/llvm/bin/clang --target=aarch64-linux-ohos"
指定使用哪个 C 编译器(这里是 OpenHarmony SDK 自带的 clang)
编译过程会用这个编译器来生成目标平台的可执行文件或库,而不是默认系统的 gcc 或 clang
SYSROOT
指定交叉编译器的 系统根路径(sysroot)
sysroot 中包含目标平台的标准库、头文件和工具链需要的文件
编译器会从这个路径寻找 include、lib 等资源,而不是系统默认路径
保证编译出的库或可执行文件可以在目标平台(OpenHarmony)上运行
export CFLAGS="--sysroot=$SYSROOT -O2"
这个环境变量是交叉编译中的关键配置,它们告诉编译器和链接器如何找到目标平台的资源。让我详细解释:
这设置了 C 编译器的标志:
--sysroot=$SYSROOT:
这是最重要的部分,它告诉编译器:"不要使用本机系统的头文件和库,而是使用 $SYSROOT 目录下的头文件和库"
对于交叉编译,这意味着:"使用 HarmonyOS 的头文件,而不是 Ubuntu 的头文件"
编译器会在 $SYSROOT/usr/include 等目录中查找头文件
-O2:
这是优化级别标志,表示启用中级优化
这会提高代码性能,但可能会增加编译时间
export LDFLAGS="--sysroot=$SYSROOT"
这设置了 链接器的标志:
--sysroot=$SYSROOT:
告诉链接器:"在 $SYSROOT 目录中查找库文件,而不是在本地系统中查找"
链接器会在 $SYSROOT/usr/lib 等目录中查找 .so 或 .a 库文件
这对于找到目标平台(HarmonyOS)的正确库至关重要
make clean mkdir -p build ./configure --host=aarch64-linux-ohos --build=x86_64-linux-gnu --prefix=$PWD/build CC="$CC" CFLAGS="--sysroot=$SYSROOT -O2" LDFLAGS="--sysroot=$SYSROOT" --enable-static --disable-shared make -j$(nproc) make install
最后在 libsodium/build 目录下生成了静态库文件 (libsodium.a) 和对应的头文件。为了验证该静态库能否在 aarch64-linux-ohos 目标平台正常运行,可将其导入 DevEco Studio 工程中,通过调用其中的加密 API(如加密、解密、哈希等)进行功能与兼容性测试,确保编译产物在实际鸿蒙系统环境中的可用性。
DevEco Studio中加载运行.a库。
将build 文件夹下的lib 和include 复制到 DevEco Studio 新建项目的..\entry\libs\arm64-v8a 目录下。然后在src/main/cpp/CMakeLists.txt 中添加
# the minimum version of CMake.
cmake_minimum_required(VERSION 3.5.0)
project(YunShiYuanCheng)
set(NATIVERENDER_ROOT_PATH ${CMAKE_CURRENT_SOURCE_DIR})
set(LIBSODIUM_ROOT ../../../libs/arm64-v8a/libsodium)
# 添加头文件路径
include_directories(${LIBSODIUM_ROOT}/include)
# 添加库文件路径
link_directories(${LIBSODIUM_ROOT}/lib)
include_directories(${NATIVERENDER_ROOT_PATH}
${NATIVERENDER_ROOT_PATH}/include
)
add_library(entry SHARED napi_init.cpp)
target_link_libraries(entry PUBLIC sodium libace_napi.z.so)
文件必须是 libsodium.a(静态库,名称不能变)
架构必须和 target 一致:aarch64-unknown-linux-ohos
Windows 上可以用 llvm-objdump 或 readelf 检查 .a 架构:
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。