Windows 上编译 mebedtls 的鸿蒙库

news/2025/2/23 17:45:15

mebedtls 地址:https://github.com/Mbed-TLS/mbedtls

准备工作:

  • clone mebedtls 仓库到本地(tag: mbedtls-2.26.0)
  • 鸿蒙工具链(SDK version: v5.0.5)

编译文件修改:

对 CMakeLists.txt 进行修改,主要是关闭了以下几个选项

  • ENABLE_PROGRAMS
  • MBEDTLS_FATAL_WARNINGS
  • ENABLE_TESTING

ENABLE_PROGRAMS 和 ENABLE_TESTING 是添加程序和测试,因为我们只需要库,所以不需要这些,减少编译文件和时间

MBEDTLS_FATAL_WARNINGS 是将警告当成错误处理,这个也需要关闭,不然编译不了

option(ENABLE_PROGRAMS "Build mbed TLS programs." OFF)
option(MBEDTLS_FATAL_WARNINGS "Compiler warnings treated as errors" OFF)
option(ENABLE_TESTING "Build mbed TLS tests." OFF)

注:CMakeLists.txt 位于根目录下,不需要改其他子文件夹里的 CMakeLists.txt

添加编译脚本(build.sh)

  • 指定鸿蒙工具链的路径
  • 添加 CMAKE 命令行
  • 指定库的输出目录
#!/bin/bash
set -e

NDK_PATH=D:/Emuator/v5.0.5/sdk/12/native
CMAKE=$NDK_PATH/build-tools/cmake/bin/cmake
STRIP=$NDK_PATH/llvm/bin/llvm-strip

arch=arm64-v8a

rm -rf build

$CMAKE -B build -G Ninja \
  -DOHOS_PLATFORM=OHOS -DOHOS_ARCH=$arch \
  -DCMAKE_TOOLCHAIN_FILE=$NDK_PATH/build/cmake/ohos.toolchain.cmake

cd build
ninja

# 创建输出目录
mkdir -p ../libs/$arch

# 处理所有三个静态库
for lib in crypto x509 tls; do
  cp ./library/libmbed${lib}.a ../libs/$arch/
done
cd ..

编译过程:

打开 bash,避免使用 powershell,因为 bash 可以看到编译的过程

$ ./build.sh

输出:

编译生成的静态库是在根目录下的 libs 文件夹里

使用:

在其他项目中引用 mbedtls 时,需要同时指定这三个静态库,否则会出现一些函数的符号文件找不到

可以参考下面的写法:

set(BUILD_ARCH "arm64-v8a")

include_directories(
  ${SRC_PATH_ROOT}/mbedtls/include
)

target_link_libraries(project PUBLIC
  libace_napi.z.so 

  ${SRC_PATH_ROOT}/mbedtls/lib/ohos/${BUILD_ARCH}/libmbedcrypto.a
  ${SRC_PATH_ROOT}/mbedtls/lib/ohos/${BUILD_ARCH}/libmbedx509.a
  ${SRC_PATH_ROOT}/mbedtls/lib/ohos/${BUILD_ARCH}/libmbedtls.a
)

小结:编译这种库之前看一遍 README,了解下可以使用哪些工具来编译,以及中间可能出现的编译错误,这样能减少时间来完成这件事。


http://www.niftyadmin.cn/n/5863632.html

相关文章

Spring Boot Validation 接口校验:从零到掌握

在开发 Web 应用时,数据校验是不可忽视的一部分。无论是注册用户信息、提交表单数据,还是处理业务逻辑,数据的有效性和完整性都需要得到保证。Spring Boot 提供了强大的验证功能,基于 Hibernate Validator 框架,通过注…

11.Docker 之分布式仓库 Harbor

Docker 之分布式仓库 Harbor Docker 之分布式仓库 Harbor1. Harbor 组成2. 安装 Harbor Docker 之分布式仓库 Harbor Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,由 VMware 开源,其通过添加一些企业必需的功能特性,例…

Spring Boot 集成 T-io 实现客户端服务器通信

Spring Boot 集成 T-io 实现客户端服务器通信 本文详细介绍如何在 Spring Boot 项目中集成 T-io 框架,实现客户端与服务器之间的通信,并支持组聊、群聊和私聊功能。通过本文,您能够全面了解 T-io core 的使用方法,以及如何正确启…

从零开始学 Rust:基本概念——变量、数据类型、函数、控制流

文章目录 Variables and MutabilityShadowing Data TypesScalar TypesCompound Types FunctionsFunction Parameters CommentsControl FlowRepetition with Loops Variables and Mutability fn main() {let mut x 5;println!("The value of x is: {}", x);x 6;pri…

蓝桥备赛(一)- C++入门(上)

一、工具安装 Dev-C安装:https://www.bilibili.com/video/BV1kC411G7CS 一般比赛会用到Dev-C, 但是Dev-C还是有自身的局限性 , 后续的博客学习中 , 必要的时候 , 会使用VS2022 , 下面是VS2022的安装和使用教程。 VS202…

Go语言中使用viper绑定结构体和yaml文件信息时,标签的使用

在Go中使用Viper将YAML配置绑定到结构体时,主要依赖 mapstructure 标签(而非 json 或 yaml 标签)实现字段名映射。 --- ### 1. **基础绑定方法** 使用 viper.Unmarshal(&config) 或 viper.UnmarshalKey("key", &subConfi…

基于FISCO-BCOS搭建第一个区块链网络

一、前言介绍: 本篇博客以Ubuntu虚拟机为例 本篇博客我会大致介绍“搭建第一个区块链网络”的搭建过程,具体的还是要查看FISCO-BCOS的官方文档。会着重介绍在搭建过程中可能遇到的一些报错,以及解决报错的常用方法。 参考FISCO-BCOS的官方文档…

Android14 Camera框架中Jpeg流buffer大小的计算

背景描述 Android13中,相机框架包含对AIDL Camera HAL的支持,在Android13或更高版本中添加的相机功能只能通过AIDL Camera HAL接口使用。 对于Android应用层来说,使用API34即以后版本的Camera应用程序通过Camera AIDL Interface访问到HAL层…