惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Martin Fowler
Martin Fowler
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
博客园 - 聂微东
IT之家
IT之家
GbyAI
GbyAI
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
Y
Y Combinator Blog
博客园 - 【当耐特】
The Cloudflare Blog
宝玉的分享
宝玉的分享
罗磊的独立博客
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
V
Visual Studio Blog
小众软件
小众软件
博客园_首页
Last Week in AI
Last Week in AI
J
Java Code Geeks
V
V2EX
雷峰网
雷峰网
Apple Machine Learning Research
Apple Machine Learning Research
阮一峰的网络日志
阮一峰的网络日志
腾讯CDC
博客园 - 司徒正美
Engineering at Meta
Engineering at Meta
The GitHub Blog
The GitHub Blog
H
Hackread – Cybersecurity News, Data Breaches, AI and More
D
DataBreaches.Net
博客园 - 三生石上(FineUI控件)
MyScale Blog
MyScale Blog
云风的 BLOG
云风的 BLOG
The Register - Security
The Register - Security
M
MIT News - Artificial intelligence
Microsoft Azure Blog
Microsoft Azure Blog
T
The Blog of Author Tim Ferriss
N
Netflix TechBlog - Medium
F
Full Disclosure
B
Blog
H
Help Net Security
C
Check Point Blog
WordPress大学
WordPress大学
人人都是产品经理
人人都是产品经理
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Jina AI
Jina AI
酷 壳 – CoolShell
酷 壳 – CoolShell
Blog — PlanetScale
Blog — PlanetScale
L
LangChain Blog
P
Proofpoint News Feed
D
Docker
Microsoft Security Blog
Microsoft Security Blog

博客园 - Fitz

测绘中2个角度相减对于跨360问题的算法总结 windows server2012 安装IIS6服务,编译器错误消息: CS0016: 未能写入输出文件“c:\*\App_Code.*.dll”--“拒绝访问。 ” - Fitz ollama 安装好之后,是不是还需要关闭一些配置? 赫尔默特变化 A=0的情况 libaom 在ubuntu 上用鸿蒙OHOS编译 如何将带有线网卡和无线网卡的台式机作为网关/路由器 相机标定 像元大小(例如 1.4 µm × 1.4 µm)具体的含义和用途 物理焦距、像素焦距、像元与相机内参(fx, fy)的意义与作用 如何使用像素坐标和相机内参来计算夹角 HarmonyOS Next Native C++ 开发入门 windows 编译rustdesk The authenticity of host '[ssh.github.com]:443([*]:443)' can't be established. ED25519 key fingerprint is matlab 云台控制 根据图像中目标位置,控制望远镜/摄像头转向目标方向 无深度方向估计 Ubuntu 安装conda 拍摄目标:采集 1000 张多样化的图片,覆盖目标的各种环境、角度、光照、尺寸和位置,提高模型的泛化能力。 android APK的MD5值获取有效办法 3D 汽车模拟器 Three.js
Ubuntu中用HarmonyOS Next的SDK编译libsodium,并在DevEco Studio中加载运行.a库
Fitz · 2025-09-06 · via 博客园 - Fitz

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),也就是在一个平台上编译目标平台的代码。具体作用如下:

  1. CC 

export CC="/root/harmony/command-line-tools/sdk/default/openharmony/native/llvm/bin/clang --target=aarch64-linux-ohos" 
  • 指定使用哪个 C 编译器(这里是 OpenHarmony SDK 自带的 clang

  • 编译过程会用这个编译器来生成目标平台的可执行文件或库,而不是默认系统的 gccclang

  1. SYSROOT 

  • 指定交叉编译器的 系统根路径(sysroot)

  • sysroot 中包含目标平台的标准库、头文件和工具链需要的文件

  • 编译器会从这个路径寻找 includelib 等资源,而不是系统默认路径

  • 保证编译出的库或可执行文件可以在目标平台(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)

2️⃣ 确认库文件和架构

  • 文件必须是 libsodium.a(静态库,名称不能变)

  • 架构必须和 target 一致:aarch64-unknown-linux-ohos

  • Windows 上可以用 llvm-objdumpreadelf 检查 .a 架构: