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_GETENV
      return secure_getenv(name);
  # endif
  #endif
#endif  // end of #ifndef YUNOS_NDK
#ifndef SECURE_GETENV
    if (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目录下生成相应文件
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

037-安全开发-JavaEE应用JNDI注入RMI服务LDAP服务JDK绕过调用链类

037-安全开发-JavaEE应用&JNDI注入&RMI服务&LDAP服务&JDK绕过&调用链类 #知识点: 1、JavaEE-JNDI注入-RMI&LDAP 2、JavaEE-漏洞结合-FastJson链 3、JavaEE-漏洞条件-JDK版本绕过 演示案例: ➢JNDI注入-RMI&LDAP服务 ➢JNDI注…

C语言scanf函数详解..

1.前言 前面说过了printf函数 他是将二进制表示的整数、浮点数、字符、字符串根据转换规范转换成字符或者字符串 并且打印到了控制台上 那么既然有了输出函数 那么肯定也有输入函数咯 的确如此 他就是scanf函数 他是将字符或者字符串根据转换规范转换成二进制表示的整数、浮点…

数学实验第三版(主编:李继成 赵小艳)课后练习答案(十二)(3)

实验十二:微分方程模型 练习三 1.分别用数值解命令ode23t和ode45 计算示例3中微分方程的数值解,同用命令ode23 算得的数值解以及解析解比较,哪种方法精度较高?你用什么方法比较它们之间的精度? clc;clear; f(x,y)2*yx2; figure(1) [x,y]ode23t(f,[1,2],1); plo…

三、Maven项目搭建及Destination(队列、主题)

Maven项目搭建及Destination(队列、主题) 一、Idea中Maven项目准备1.创建Module2.创建java包3.配置pom.xml 二、队列(Queue)1.JMS编程架构2.代码实现生产者3.代码实现消费者4.队列消费者三大情况 三、消费者类型1.同步式消费者1.1…

【MATLAB】鲸鱼算法优化混合核极限学习机(WOA-HKELM)回归预测算法

有意向获取代码,请转文末观看代码获取方式~也可转原文链接获取~ 1 基本定义 鲸鱼算法优化混合核极限学习机(WOA-HKELM)回归预测算法是一种结合鲸鱼优化算法和混合核极限学习机的混合算法。其原理主要包含以下几个步骤: 初始化&am…

VMware Tools安装教程(适用windows虚拟机)

一、资源 VMware-tools安装包已绑定在资源中 二、步骤 1、点击已经开启的虚拟机中的此图标,点击设置 2、将镜像文件选中,点击确定 3、之后会自动进入安装过程,点击下一步 4、选择典型安装,下一步直到完成,完成后重启…

Swift Combine 合并多个管道以更新 UI 元素 从入门到精通十七

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三Swift Combine 发布者publisher的生命周期 从入门到精通四Swift Combine 操作符operations和Subjects发布者的生命周期 从入门到精通五Swift Com…

【Deep Learning 3】CNN卷积神经网络

🌞欢迎来到机器学习的世界 🌈博客主页:卿云阁 💌欢迎关注🎉点赞👍收藏⭐️留言📝 🌟本文由卿云阁原创! 📆首发时间:🌹2024年2月17日&…

Netty中的内置通信模式、Bootstrap和ChannelInitializer

内置通信传输模式 NIO:io.netty.channel.socket.nio 使用java.nio.channels包作为基础–基于选择器的方式Epoll:io.netty.channel.epoll由JNI驱动的epoll()和非阻塞IO.这个传输支持只有在Linux上可用的多种特性,如果SO_REUSEPORT,比NIO传输更快&#xf…

【深度学习】Pytorch 系列教程(三):PyTorch数据结构:2、张量的数学运算(1):向量运算(加减乘除、数乘、内积、外积、范数、广播机制)

文章目录 一、前言二、实验环境三、PyTorch数据结构0、分类1、Tensor(张量)1. 维度(Dimensions)2. 数据类型(Data Types)3. GPU加速(GPU Acceleration) 2、张量的数学运算1. 向量运算…

数字孪生与智慧城市:共筑未来城市的科技基石

一、引言 随着科技的飞速发展,数字孪生与智慧城市已成为未来城市建设的两大关键技术。数字孪生为城市提供了一个虚拟的数字镜像,使我们能全面、深入地了解城市的运行状态。而智慧城市则借助先进的信息通信技术,提升城市的智能化水平&#xf…

算法刷题:复写零

复写零 .习题链接题目描述算法原理初始值步骤1步骤2我的答案: . 习题链接 复写零 题目描述 给你一个长度固定的整数数组 arr ,请你将该数组中出现的每个零都复写一遍,并将其余的元素向右平移。 注意:请不要在超过该数组长度的位置写入元素…

【OpenAI Sora】开启未来:视频生成模型作为终极世界模拟器的突破之旅

这份技术报告主要关注两个方面:(1)我们的方法将各种类型的视觉数据转化为统一的表示形式,从而实现了大规模生成模型的训练;(2)对Sora的能力和局限性进行了定性评估。报告中不包含模型和实现细节…

CCF编程能力等级认证GESP—C++6级—20231209

CCF编程能力等级认证GESP—C6级—20231209 单选题(每题 2 分,共 30 分)判断题(每题 2 分,共 20 分)编程题 (每题 25 分,共 50 分)闯关游戏工作沟通 答案及解析单选题判断题编程题1编程题2 单选题…

二叉树入门算法题详解

二叉树入门题目详解 首先知道二叉树是什么: 代码随想录 (programmercarl.com) 了解后知道其实二叉树就是特殊的链表,只是每个根节点节点都与两个子节点相连而其实图也是特殊的链表,是很多节点互相连接;这样说只是便于理解和定义…

安卓TextView 拖动命名

需求:该布局文件使用线性布局来排列三个文本视图和一个按钮,分别用于显示两个动物名称以及占位文本视图。在占位文本视图中,我们为其设置了背景和居中显示样式,并用其作为接收拖放操作的目标 效果图; 实现代码 第一布…

大数据02-数据仓库

零、文章目录 大数据02-数据仓库 1、数据仓库介绍 (1)基本概念 数据仓库,英文名称为Data Warehouse,可简写为DW或DWH。数据仓库的目的是构建面向分析的集成化数据环境,为企业提供决策支持(Decision Sup…

牛客网SQL进阶123:高难度试卷的得分的截断平均值

官网链接: SQL类别高难度试卷得分的截断平均值_牛客题霸_牛客网牛客的运营同学想要查看大家在SQL类别中高难度试卷的得分情况。 请你帮她从exam_。题目来自【牛客题霸】https://www.nowcoder.com/practice/a690f76a718242fd80757115d305be45?tpId240&tqId2180…

[Android]Frida-hook环境配置

准备阶段 反编译工具:Jadx能够理解Java语言能编写小型的JavaScript代码连接工具:adb设备:Root的安卓机器,或者模拟器 Frida(https://frida.re/) 就像是你计算机或移动设备的妙妙工具。它帮助你查看其他程序或应用内部发生的事情&#xff0…

OpenAI发布文生视频大模型Sora

关注卢松松,会经常给你分享一些我的经验和观点。 一觉醒来发现自己快失业了,Open AI又放大招了。没有任何消息,没有任何预热,直接王炸。 OpenAI突然发布文生视频大模型Sora,生成一段长达1分钟的高清流畅视频。它能模…