交叉编译(NDK)
文章目录
- 前言
- Android-NDK使用
- NDK目录结构
- 主流的Android NDK交叉编译
前言
交叉编译是指在一种计算机体系结构上编译和构建应用程序,但是生成的可执行文件和库是针对另一种不同的体系结构,比如ARM、MIPS、PowerPC、x86 等。
常见的交叉编译工具集:
- GNU 工具链:比如编译ARM64架构可以使用
gcc-aarch64-linux-gnu工具,并可以使用gdb-multiarch工具来进行调试,一般用qemu来运行多架构的可执行文件然后使用gdb-multiarch进来远程调试 - Clang/LLVM 工具链:Clang/LLVM 工具链支持许多不同的架构和操作系统
- Android NDK:专门为 Android 平台提供的交叉编译工具集。使用的编译工具链为
Clang/LLVM - Microsoft Visual Studio 工具集:Microsoft Visual Studio 提供了一些用于 Windows 平台的交叉编译工具,包括 Visual C++ 工具集、Windows SDK 和 WDK。
- Intel C++ 编译器:Intel C++ 编译器支持多种架构和操作系统,包括 IA-32、Intel 64、ARM 等。
Android-NDK使用
为了进行交叉编译,需要为每种目标 CPU 架构配置相应的编译工具链和系统头文件,那么就需要下载NDK工具包里面包含了:
Clang/LLVM交叉编译的工具集和GNU工具集(现在一般都是用Clang/LLVM)库文件libc、libm、libz、liblog 等JNIAndroid 平台的所有系统头文件和 API,比如- OpenGL ES
- OpenSL ES
- Vulkan
- MediaCodec
- 调试工具比如
gdb\lldb,NDK还提供了一个ndk-gdb这个文件是一个python脚本文件通过封装adb+gdb的方式来远程调试
NDK目录结构
$ wget https://dl.google.com/android/repository/android-ndk-r21e-darwin-x86_64.zip
#我是OSX系统则下载darwin版本$ ls
CHANGELOG.md/ ndk-gdb* shader-tools/
NOTICE ndk-stack* simpleperf/
NOTICE.toolchain ndk-which* source.properties
README.md/ package.xml sources/
build/ platforms/ sysroot/
meta/ prebuilt/ toolchains/
ndk-build* python-packages/ wrap.sh/
工具(外层是一个链接壳):
ndk-build:bash编译脚本,用于构建编译 C/C++ 命令,内部通过调用Clang/llvm工具集、Cmake工具最终生成可用于 Android 应用程序的共享库。ndk-gdb:python脚本。用于调试 Android 应用程序的 GDB 调试器。ndk-stack:用于解析崩溃日志的工具,可以将崩溃堆栈转换为可读的形式,以方便分析和修复错误。ndk-depends:python脚本。用于检查 C/C++ 代码的依赖关系。ndk-which:bash脚本。用于查找 NDK 工具链中的特定工具的路径。
目录:
-
toolchains: 包含各种支持的 CPU 架构的编译器和工具链。 -
platforms: 包含可用于构建本地库的 Android 平台版本。 -
sysroot:包含头文件和库,这些库可以在特定平台版本上构建本地库时使用,里面包含vulkan框架的共享库、头文件。 -
sources:包含 Android 系统源代码,可以在构建本地库时使用。 -
build:ndk-build工具的工作目录,内包含build-shader-tools.py是一个用于将使用 OpenGL Shading Language (GLSL) 编写的着色器代码编译成可被 Android 应用程序使用的格式的 Python 脚本,该应用程序使用 Android NDK (Native Development Kit) 进行开发.build-shader-tools.py是一个用于将使用 OpenGL Shading Language (GLSL) 编写的着色器代码编译成可被 Android 应用程序使用的格式的 Python 脚本,该应用程序使用 Android NDK (Native Development Kit) 进行开发。该脚本通常作为使用 OpenGL ES 进行图形渲染的 Android 应用程序构建过程的一部分使用。它以一个或多个 GLSL 文件作为输入,并生成可在应用程序中加载和使用的二进制文件
-
simpleperf: simpleperf工具的 C++ 代码和相关的构建脚本,用于编译 simpleperf工具可执行文件simpleperf是一个用于在 Android 系统上进行性能分析的工具。它是一个命令行工具,可帮助开发人员分析应用程序在运行时的 CPU 使用情况、函数调用频率、线程活动等方面的性能数据。可以通过ndk-build脚本来编译simpleperf工具的源代码,并生成simpleperf可执行文件
-
shader-tools包含了 GLSL 编译器等其他工具,用于生成、调试 GLSL 代码,并构建 OpenGL ES 应用程序
Toolchains目录:
$ ls
aarch64-linux-android-4.9/ renderscript/
arm-linux-androideabi-4.9/ x86-4.9/
llvm/ x86_64-4.9/
renderscript:于构建 RenderScript 应用程序的工具集合(包含llvm-rs-cc编译器)。RenderScript 是一种高性能计算框架,可以在 Android 应用程序中使用,用于处理图像、音频、视频等大数据集合aarch64/arm/x86/x86_64 -4.9:用于构建各个架构的工具链目录,其中4.9表示使用GCC 4.9作为交叉编译工具集编译文件llvm:里面存放着clang/llvm工具集以及和上面GCC一样各个架构的库文件
主流的Android NDK交叉编译
Clang/llvm作为编译工具集,clang编译速度,以及代码优化比GCC强,并且clang本身就是一个可用于多架构编译前端编译器aarch64-linux-android作为编译架构,目前的绝大部分Android真机都是armv8-a架构,小部分老手机使用armv7架构,x86\x64在移动端市场上基本都是手机模拟器在使用
相关文章:
交叉编译(NDK)
文章目录前言Android-NDK使用NDK目录结构主流的Android NDK交叉编译前言 交叉编译是指在一种计算机体系结构上编译和构建应用程序,但是生成的可执行文件和库是针对另一种不同的体系结构,比如ARM、MIPS、PowerPC、x86 等。 常见的交叉编译工具集&#x…...
【数据库】MySQL 解读事务的意义及原则
目录 1.事务的概念 2.为什么要用事物 3.使用 4.事务的原则(ACID) 4.1原子性(Atomicity) 4.2一致性(Consistency) 4.3持久性(Durability) 4.4隔离性(Isolation…...
【Linux】冯诺依曼体系结构
冯诺依曼体系结构一、计算机结构体系来源二、冯诺依曼体系结构三、冯诺依曼体系结构中的数据流动一、计算机结构体系来源 研制电子计算机的想法产生于第二次世界大战期间,主要用来进行弹道计算,在"时间就是胜利"的战争年代,迫切需…...
【小白】git是什么?gitee和git和github的关系?
gitee问题一、git是什么?gitee和git和github的关系?问题二、能不能通俗易懂的说?问题一、git是什么?gitee和git和github的关系? Git是一种版本控制系统,用于管理文件的版本、记录文件的修改历史以及协同开…...
UDS 14229 -1 刷写34,36,37服务,标准加Trace讲解,没理由搞不明白
🍅 我是蚂蚁小兵,专注于车载诊断领域,尤其擅长于对CANoe工具的使用🍅 寻找组织 ,答疑解惑,摸鱼聊天,博客源码,点击加入👉【相亲相爱一家人】🍅 玩转CANoe&…...
【Android -- 软技能】聊聊程序员的软技能
什么是软技能? 所谓软技能,就是相对于「硬技能」而言的技能,对于程序员来说,「硬技能」就是计算机专业技术能力,软技能则是专业之外的所有技能,包括职业规划能力、处理人际关系能力、专业态度、做事的方式…...
【Java学习笔记】27.Java 抽象类
Java 抽象类 在面向对象的概念中,所有的对象都是通过类来描绘的,但是反过来,并不是所有的类都是用来描绘对象的,如果一个类中没有包含足够的信息来描绘一个具体的对象,这样的类就是抽象类。 抽象类除了不能实例化对象…...
Vite4 + Vue3 + vue-router4 动态路由
动态路由,基本上每一个项目都能接触到这个东西,通俗一点就是我们的菜单是根据后端接口返回的数据进行动态生成的。表面上是对菜单的一个展现处理,其实内部就是对router的一个数据处理。这样就可以根据角色权限或者一些业务上的需求࿰…...
MS(mbed l432KC)-->速通9个lab详细解析[5]
Exercise5 这次实验我们将正式接触到一个相对来说有点意思并且有点牌面的传感器了----->数码管。数码管是我们生活中非常常见的一种传感器,比如计时器,秒表,以及数字显示大屏幕,其实原理都跟数码管差不多。如果是没有单片机基础的同学,突然一下接触到相对来说比较常见…...
XXE漏洞复现
目录XML基础概念XML数据格式DTD基础定义DTD作用分类DTD实体实体的分类DTD元素XXE漏洞介绍实操如何探测xxe漏洞XML基础 概念 什么是XML 是一种可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型…...
初识C++需要了解的一些东西(2)
😁关注博主:翻斗花园第一代码手牛爷爷 😃Gitee仓库:牛爷爷爱写代码 目录🌍内联函数🌕内联函数概念🌖内联函数特性🌓auto关键字(C11)🌞类型别名⭐️auto简介☀️auto的使…...
全国程序员薪酬大曝光!看完我酸了····
2023年,随着互联网产业的蓬勃发展,程序员作为一个自带“高薪多金”标签的热门群体,被越来越多的人所关注。在过去充满未知的一年中,他们的职场现状发生了一定的改变。那么,程序员岗位的整体薪资水平、婚恋现状、职业方…...
改进YOLO系列 | CVPR2023最新Backbone | FasterNet 远超 ShuffleNet、MobileNet、MobileViT 等模型
论文地址:https://export.arxiv.org/pdf/2303.03667v1.pdf 为了设计快速神经网络,许多工作都集中在减少浮点运算(FLOPs)的数量上。然而,作者观察到FLOPs的这种减少不一定会带来延迟的类似程度的减少。这主要源于每秒低浮点运算(FLOPS)效率低下。并且,如此低的FLOPS主要…...
Nginx常见用法
一、Niginx是什么? Nginx是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。Niginx是一款轻量级的web服务器/反向代理器,Nginx是高性能的HTTP和 反向代理的web服务器,处理高并发的能力十分强大,…...
MySQL存储引擎和日志管理
MySQL存储引擎和日志管理一、存储引擎的概念1、Myisam的特点2、Myisam表支持 3 种不同的存储格式3、innodb4、死锁5、查看系统支持的存储引擎6、查看表使用的存储引擎7、修改存储引擎8、通过 create table 创建表时指定存储引擎二、日志管理1、错误日志2、通用查询日志3、慢查询…...
Arduino 驱动DS1307时钟模块使用介绍
Arduino 驱动DS1307时钟模块使用介绍 🔖DS1307时钟模块 📍DS1307时钟模块资料 https://pan.baidu.com/s/1mtXruLAktZj7UDhFD54BNw 提取码:d9xh 📋模块简介:DS1307 I2C实时时钟芯片(RTC) 24C32 32K I2C EEPROM存储器 解决DS1307带备用电池不能读写的问题。 充满电后,…...
为什么 Python 没有 main 函数?
众所周知,Python中没有所谓的main函数,但是网上经常有文章提到“ Python的main函数”和“建议编写main函数”。 其实,可能他们是想模仿真正的main函数,但是许多人都被误导(或误解),然后编写了非…...
【无标题】使用Bibtex4word 整理毕业论文参考文献
Bibtex4Word使用一览需要安装和配置的软件texLiveBibtex4word需要安装和配置的软件 texLive 这个就不多说啦,大家自己找教程安装吧,因为我之前装过这一系列所以就不再来一遍了,但是有两条配置需要注意! 添加环境变量 key: BIB…...
19--网络API(java版)
什么是网络API在一个网站里面发起https请求是很常见的,但是,由于微信小程序是腾讯内部的产品,不能直接打开一个外部的链接,例如,您在微信小程序里面无法直接打开网站,但是,在做小程序开发的时候…...
ElasticSearch - 分片内部原理之动态更新索引、近实时搜索、持久化变更、段合并
文章目录01. ElasticSearch 倒排索引是什么?02. ElasticSearch 倒排索引为什么是不可变的?03. ElasticSearch 索引文档原理?04. ElasticSearch 如何动态更新索引?05. ElasticSearch 文档的新增、删除、更新?06. Elasti…...
别再乱打包了!手把手教你用Kali Linux和Metasploit生成免杀后门(附实战演示)
Kali Linux高级免杀技术实战:从原理到绕过Windows Defender 在渗透测试和红队演练中,后门程序的免杀能力直接决定了行动的成败。许多初学者在使用Metasploit生成基础payload后,常常发现它们被主流杀毒软件轻易拦截。本文将深入探讨免杀技术的…...
Unity(十六)切换场景及鼠标相关
场景切换空间命名:using UnityEngine.SceneManagement;直接用代码切换场景有问题要把场景加入到场景列表之中SceneList哪个场景在前面,谁在运行时就会首先进入过时方法Application.LoadLevel()if (Input.GetKeyDown(KeyCode.Space)) {SceneManager.LoadS…...
VR大空间项目屡获行业大奖,AI数字人公司赋能文旅智慧升级
在经历了早期的概念普及和单点试验后,AI数字人、VR、MR等技术正在文旅行业完成从“尝鲜”到“刚需”的蜕变。不再仅仅是博物馆或景区里的一块互动屏幕,而是一套能够重塑服务流程、活化文化IP、创造全新消费场景的完整解决方案。从边疆秘境到城市地标&…...
BetaClaw:开源AI代理运行时,统一多模型调用与智能成本控制
1. 项目概述:一个为开发者打造的“瑞士军刀”级AI代理运行时如果你和我一样,每天都在和不同的AI模型打交道,那你一定也经历过这种痛苦:想用Claude写点创意文案,得去Anthropic的API;想用GPT-4o分析代码&…...
91160-cli:健康160平台终极挂号神器,5分钟上手解决抢号难题
91160-cli:健康160平台终极挂号神器,5分钟上手解决抢号难题 【免费下载链接】91160-cli 健康160全自动挂号脚本,捡漏神器 项目地址: https://gitcode.com/gh_mirrors/91/91160-cli 你是否还在为抢不到专家号而烦恼?面对健康…...
AI驱动的链上数据分析:Arkham工具实战与智能监控体系构建
1. 项目概述:一个面向链上数据的智能分析中枢如果你和我一样,在加密货币和Web3的世界里摸爬滚打了几年,你一定会对一个问题深有感触:链上数据浩如烟海,但真正能转化为有效决策的洞察却少之又少。我们每天面对着成千上万…...
按类型搜索文件
rg -n "getState" --typec --typejava...
深度学习对抗性攻击与防御:从FGSM到对抗训练的技术全景
1. 项目概述:当深度学习模型遭遇“精心设计的噪声”在图像识别、自动驾驶、金融风控等关键领域,深度学习模型正扮演着越来越核心的角色。我们通常关注的是模型的准确率、召回率这些“正面战场”上的表现,但一个容易被忽视的致命问题是&#x…...
Python+OpenCV+PyQt5+SVM实现车牌识别系统(源码)
目录 一、项目背景 二、技术介绍 三、功能介绍 四、 代码设计 五、系统实现 一、项目背景 随着我国城市化进程的不断加快,机动车保有量呈现持续快速增长态势。据公安部统计,2024年全国机动车保有量已突破4.5亿辆,其中汽车占比超过80%。…...
图像识别与目标检测:从概念到实战的全面解析
1. 项目概述:从“认脸”到“找茬”的认知跃迁在计算机视觉这个行当里干了十几年,我见过太多刚入行的朋友,甚至是一些有经验的开发者,对“图像识别”和“目标检测”这两个词傻傻分不清楚。经常有人拿着一个“识别猫狗”的需求过来&…...
