AliOS编译三方库

news2024/11/25 11:06:33

文章目录

  • 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目录下生成相应文件
在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

优思学院|六西格玛到底有没有用?

有很多人说,我的企业已经是行业的顶峰,不需要做些什么了,更不需要什么六西格玛。如果你这样想就大错特错了。历史上不乏因自满而错失发展机遇,最终被竞争对手超越的案例。 诺基亚(Nokia),曾经的…

102.网游逆向分析与插件开发-网络通信封包解析-解读喊话道具数据包并且利用Net发送

内容参考于:易道云信息技术研究院VIP课 上一个内容:解读聊天数据包并且利用Net发送 码云地址(游戏窗口化助手 分支):https://gitee.com/dye_your_fingers/sro_-ex.git 码云版本号:cc6370dc5ca6b0176aafc…

【web | CTF】BUUCTF [BJDCTF2020]Easy MD5

天命:好像也挺实用的题目,也是比较经典吧 天命:把php的MD5漏洞都玩了一遍 第一关:MD5绕过 先声明一下:这题的MD5是php,不是mysql的MD5,把我搞迷糊了 一进来题目啥也没有,那么就要看…

P1498 南蛮图腾题解

题目 给定一个正整数n,参考输出样例,输出图形。 输入输出格式 输入格式 每个数据输入一个正整数n,表示图腾的大小(此大小非彼大小) 输出格式 这个大小的图腾 输入输出样例 输入样例 2 输出样例 /\/__\/\ /\…

前端秘法基础式(CSS)(第一卷)

一.认识CSS CSS 指的是层叠样式表(Cascading Style Sheets),它是一种用于描述网页外观和布局的语法 CSS 可以定义网页中元素的字体、颜色、大小、位置、背景等样式,使网页具有美观的外观和统 一的风格。 通过将 CSS 样式表与 HTML…

成员方法传参机制

一、成员方法传参机制 1、值传递:形参改变不影响实参 2、地址传递:形参改变影响实参

wordpress外贸成品网站模板

首页大图slider轮播,橙色风格的wordpress外贸网站模板 https://www.zhanyes.com/waimao/6250.html 蓝色经典风格的wordpress外贸建站模板 https://www.zhanyes.com/waimao/6263.html

NetMizer 日志管理系统 多处前台RCE漏洞复现

0x01 产品简介 NetMizer是提供集成应用交付和应用安全解决方案以实现业务智能网络的优秀全球供应商,为全球企业和运营商提供确保关键业务应用的全面可用性、高性能和完善的安全性的解决方案。 0x02 漏洞概述 NetMizer 日志管理系统position.php、hostdelay.php、等接口处存在…

【动态规划初识】不同的二叉搜索树

每日一道算法题之不同二叉搜索树个数 一、题目描述二、思路三、C++代码一、题目描述 题目来源:LeetCode 给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。 C++程序要求输入输出格式如下: 示例1:…

Gartner指引:四大误区大揭秘,打造高效安全管理体系

安全管理体系是一个复杂的生态系统,定义了企业的关键信息、安全原则、资源和活动(见图1)。企业机构所构建和运行的安全体系往往难以既对员工实用,又能有效管理快速发展的数字风险。因此,首席信息官(CIO&…

2024.2.16日总结(小程序开发8)

数据监听器 监听对象属性的变化 数据监听器支持监听对象中单个或多个属性的变化 纯数据字段 什么是纯数据字段 纯数据字段指的是哪些不用于页面渲染的data字段 应用场景:例如有些情况下,某些 data 中的字段既不会展示在界面上,也不会传递给其他组件…

《Go 简易速速上手小册》第1章:Go 语言基础(2024 最新版)

文章目录 1.1 Go 语言的安装与环境配置1.1.1 基础知识讲解案例 Demo:简单的 Go 程序 1.1.2 重点案例:搭建一个 Go Web 服务准备工作步骤 1:创建项目目录步骤 2:编写 Web 服务代码步骤 3:运行你的 Web 服务步骤 4&#…

[word] 手把手教您在word中添加mathtype加载项 #笔记#职场发展

手把手教您在word中添加mathtype加载项 mathtype安装完成后,正常情况下会在word文档中的菜单中自动添加mathtype加载项,但有时也会出现小意外,mathtype并没有加载到word文档中,本教程将教您解决如何手动添加mathtype加载项。 原…

Springboot的it职业生涯规划系统(有报告)。Javaee项目,springboot项目。

演示视频: Springboot的it职业生涯规划系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&a…

【上海游戏业:创新与商业的结合】

上海游戏业:创新与商业的结合 我国游戏产业在近年来蓬勃发展,不同城市都涌现出许多优秀的游戏公司。为全面了解中国游戏业的发展情况及地区特色,本文选择分析游戏业较为发达的上海、广州、北京、深圳、成都、杭州、福建七个城市。这些城市在…

AI使用 G-API 实现面部美化算法

介绍 在本教程中,您将学习: 示例面部美化算法的基础知识; 如何使用 G-API 推断管道内的不同网络; 如何在视频流上运行 G-API 管道。 先决条件 此示例需要: 装有 GNU/Linux 或 Microsoft Windows 的 PC(支持 Apple macOS&#xf…

Windows下体验Stable Diffusion 近距离感受AI魔法绘画

🌹作者主页:青花锁 🌹简介:Java领域优质创作者🏆、Java微服务架构公号作者😄 🌹简历模板、学习资料、面试题库、技术互助 🌹文末获取联系方式 📝 往期专栏回顾 专栏描述Java项目实战介绍Java组件安装、使用;手写框架等Aws服务器实战Aws Linux服务器上操作ngin…

25.原型链和原型(非常重要),听说你还没搞懂??

1. 对原型、原型链的理解 在JavaScript中是使用构造函数来新建一个对象的,每一个构造函数的内部都有一个 prototype 属性,它的属性值是一个对象,这个对象包含了可以由该构造函数的所有实例共享的属性和方法。当使用构造函数新建一个对象后&a…

2024-02-16 AIGC-数字人-平台调研-记录

摘要: 2024-02-16 AIGC-数字人-平台调研 需求分析: 数字人-平台调研 南京硅基智能北京风平智能[风平科技]品达集团[杭州品达企服科技(集团)有限公司]花脸数字技术灰豚数字人[温州专帮信息科技有限公司]魔珐科技数字栩生公司官网guiji-ows风平智能 - 领先的AIGC解决方案提供商。…

小白水平理解面试经典题目LeetCode 102 Binary Tree Level Order Traversal【二叉树】

102. 二叉树层次顺序遍历 小白渣翻译 给定二叉树的 root ,返回其节点值的层序遍历。 (即从左到右,逐级)。 例子 小白教室做题 在大学某个自习的下午,小白坐在教室看到这道题。想想自己曾经和白月光做题&#xff0c…