AliOS编译三方库

文章目录

  • 1、官网教程
  • 2、编译NDK
    • 2.1 下载ndk
    • 2.2 编译环境准备
    • 2.3 安装ndk
  • 3 cmake交叉编译
    • 3.1 编译工具链
    • 3.2 编译三方库
  • 4 自带编译配置文件的交叉编译

1、官网教程

AliOS开发官网链接:AliOS开发者官网
在这里插入图片描述
应用开发下NDK开发有相关NDK开发介绍

2、编译NDK

2.1 下载ndk

在这里插入图片描述
首先,下载ndk

2.2 编译环境准备

  • 安装make
sudo apt install make
  • 安装nodejs
sudo apt install nodejs
# 查看nodejs是否安装成功,查看版本
node -v
  • 安装npm
sudo apt install npm
#查看npm是否安装成功,查看版本
npm -v

2.3 安装ndk

在这里插入图片描述首先将ndk拷贝到服务器中,这里准备将ndk解压到aliNDK中

tar -zxvf alios-ivi-ndk-linux*.tar.gz -C ./aliDNK/

使用tar命令解压,并指定解压目录
在这里插入图片描述
解压后目录结构如图所示,然后执行安装

# 导入环境变量
export NDK_ROOT=/home/xy/code/aliosndk/
# 安装yndk
sudo npm install -g ./ali-yndk-build-2.9.8.tgz
# 测试yndk
yndk-build --help
# 安装make toolchain
npm install -g $NDK_ROOT/toolchains/ali-make_standalone_toolchain*.tgz
# 测试make toolchain
make_standalone_toolchain -h

3 cmake交叉编译

以expat三方库为例

3.1 编译工具链

首先创建交叉编译工具链

make_standalone_toolchain \--arch arm64 \--stl gnustdc++ \--api 5 \--install-dir aarch64-toolchain \--force

其中api可以指定为对应的api级别。也可以通过–install-dir指定安装目录
在这里插入图片描述

export TOOLCHAIN_ROOT=`pwd`/aarch64-toolchain

导出环境变量,该环境变量会在交叉编译时使用

3.2 编译三方库

下载expat源码expat

# 解压源码
tar -zxvf expat-2.5.0.tar.gz -C .

在这里插入图片描述
源码解压后,存在CMakeLists.txt,可以通过cmake编译
编写配置文件yunos_ndk_aarch64.cmake

SET(CMAKE_SYSTEM_NAME Linux)
# specify the cross compiler
SET(CMAKE_C_COMPILER   $ENV{TOOLCHAIN_ROOT}/bin/aarch64-linux-gnueabi-gcc)
SET(CMAKE_CXX_COMPILER $ENV{TOOLCHAIN_ROOT}/bin/aarch64-linux-gnueabi-g++)
# where is the target environment
SET(CMAKE_FIND_ROOT_PATH  $ENV{TOOLCHAIN_ROOT}/sysroot)
# never search for programs in the build host directories
SET(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
# for libraries and headers in the target directories
SET(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
SET(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
# set rpath after run `make all install`
SET(CMAKE_INSTALL_RPATH $ORIGIN)

这里的TOOLCHAIN_ROOT是上面导出的环境变量,指向了编译后的ndk路径
CMAKE_FIND_ROOT_PATH指示,编译依赖文件的根路径,可以设置成默认的。如果自己设置了sysroot,可以在这里面添加
配置文件完成之后可以执行文件编译。目前在代码根目录

mkdir out && cd out
cmake -DCMAKE_TOOLCHAIN_FILE=../yunos_ndk_aarch64.cmake -DCMAKE_INSTALL_PREFIX=./install ../
make && make install

CMAKE_INSTALL_PREFIX环境变量定义cmake执行make install命令时的安装路径。目前就是安装在out/install目录下的
编译后的文件如下:
在这里插入图片描述
包含可执行文件,动态库和头文件等

4 自带编译配置文件的交叉编译

这里以openssl为例
下载源码并解压

tar -zxvf openssl-3.2.0.tar.gz -C ./

修改crypto/getenv.c源码

char *ossl_safe_getenv(const char *name)
{
#ifndef YUNOS_NDK  // 当 YUNOS_NDK 有定义时,跳过 secure_getenv的使用#if defined(__GLIBC__) && defined(__GLIBC_PREREQ)# if __GLIBC_PREREQ(2, 17)#  define SECURE_GETENVreturn secure_getenv(name);# endif#endif
#endif  // end of #ifndef YUNOS_NDK
#ifndef SECURE_GETENVif (OPENSSL_issetugid())return NULL;return getenv(name);
#endif
}

原因是 NDK glibc 并不支持 secure_getenv 这类 GNU 扩展的 API。所以需要在代码中避免使用这类 API。如果版本有差异,则只需要修改secure_getenv调用部分代码就可以
然后执行编译

TOOL=aarch64-linux-gnueabi && CFLAGS="-fPIC -DYUNOS_NDK"
mkdir out && cd out
../Configure  no-async linux-aarch64 shared --prefix=./install --openssldir=$INSTALL_DIR/openssl --cross-compile-prefix=${TOOLCHAIN_ROOT}/bin/${TOOL}- ${CFLAGS}
make && make install

执行完成之后,在out/install目录下生成相应文件
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/472208.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【JavaScript】面试手写题精讲之数组(上)

专题缘由 该专题主要是讲解我们在面试的时候碰到一些JS的手写题, 确实这种手写题还是比较恶心的。有些时候好不容易把题目写出来了,突然面试官冷不丁来一句有没有更优的解法,直接让我们僵在原地。为了解决兄弟们的这些困扰,这个专题于是就诞…

【C++】---类和对象(上)入门

一、类的定义 1.那么众所周知,C语言是面向过程的,关注的是过程,分析出求解的步骤,通过函数的调用来逐步解决问题 2.而C是基于面向对象的,关注的是对象,将一件事情拆分成不同的对象,靠对象之间交…

压缩PDF的大小-Adobe Acrobat Pro

经常遇到上传的pdf太大,无法成功上传。 今天找到一个方法: 打开Adobe Acrobat Pro软件 → 文件 → 另存为其他(H)... →缩小大小的PDF 版本选择 4.0 最低的版本。 文件由9M变为1.5M。

第三百四十八回

文章目录 1. 概念介绍2. 使用方法2.1 List2.2 Map2.3 Set 3. 示例代码4. 内容总结 我们在上一章回中介绍了"convert包"相关的内容,本章回中将介绍collection.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的内容是col…

PLC_博图系列☞FBD

PLC_博图系列☞FBD 文章目录 PLC_博图系列☞FBD背景介绍FBD优势局限性 FBD 元素 关键字: PLC、 西门子、 博图、 Siemens 、 FBD 背景介绍 这是一篇关于PLC编程的文章,特别是关于西门子的博图软件。我并不是专业的PLC编程人员,也不懂电路…

anomalib1.0学习纪实

回顾:细分、纵深、高端、上游、积累、极致。 回顾:产品化,资本化,规模化,大干快上,小农思维必死无疑。 春节在深圳新地中央,学习anomalib1.0。 一、安装: 1、常规安装 采用的是…

Netty Review - 底层零拷贝源码解析

文章目录 Pre概述源码解析入口索引AbstractNioByteChannel.NioByteUnsafe#readallocHandle.allocate(allocator) 小结传统的零拷贝 Pre Netty Review - 直接内存的应用及源码分析 概述 Netty 的零拷贝技术是通过优化数据传输过程中的数据复制操作,以降低系统的开销…

租赁香港服务器多少钱一个月?24元

阿里云香港服务器2核1G、30M带宽、40GB ESSD系统盘优惠价格24元/月,288元一年,每月流量1024GB,多配置可选,官方优惠活动入口 https://t.aliyun.com/U/bLynLC 阿里云服务器网aliyunfuwuqi.com分享阿里云香港服务器优惠活动、详细配…

嵌入式Qt Qt中的字符串类

一.Qt中的字符串类 QString vs string&#xff1a; QString在Qt库中几乎是无所不在的 所有的Qt图形用户组件都依赖于QString 实验1 &#xff1a;QString 初体验 #include <QDebug> void Sample_1() {QString s "add";s.append(" "); // &q…

Python 异常处理及程序调试

Python 是一门功能强大而又易于学习的编程语言&#xff0c;它提供了丰富的工具和库来帮助开发者编写高效、稳定的程序。然而&#xff0c;在编写复杂的应用程序时&#xff0c;错误和异常是难以避免的。本文将介绍 Python 中的异常处理机制以及程序调试技巧&#xff0c;帮助读者提…

开什么店最稳定轻松?适合一个人开的实体店推荐

在创业的道路上&#xff0c;很多人都希望找到一种稳定轻松的开店方式。 作为一名资深的鲜奶吧创业者&#xff0c;我将分享我的经验和见解&#xff0c;希望能给那些想开实体店的朋友们一些启示&#xff01;&#xff01; 我开鲜奶吧已经有 5 年时间了&#xff0c;目前经营的是鲜…

Chat with RTX 安装

1、Chat With RTX 介绍 Chat With RTX 是一个 Demo&#xff0c;用来将您自己的资料&#xff08;文档、笔记、视频或其他数据&#xff09;与大语言模型建立连接&#xff0c;从而令 LLM 更具个性化。利用检索增强生成 (RAG)、TensorRT-LLM 和 RTX 加速&#xff0c;您可以与自定义…