[✔️]ndk目录深入分析

简介: [✔️]ndk目录深入分析

这里以ndk-r14b举例,每个版本可能都有差异:


  • ndk-r14b


  • build


  • lib


  • build_support.py:各种arch cpu怎么配对


  • ndk-build: 命令的源头


  • ndk-build(linux) / ndk-build.cmd(windows):转向build/ndk-build


  • toolchains:各个平台编译工具链


  • llvm:LLVM是一套编译器基础设施项目,为自由软件,以C++写成,包含一系列模块化的编译器组件和工具链,用来开发编译器前端和后端。


  • platforms


  • android-9:支持的api level


  • arch-arm:不同的cpu架构


  • usr


  • include


  • xx.h: so库的头文件


  • lib


  • xxx.so:各种打包好的so库


  • arch-mips


  • arch-x86


  • android-11


toolchains


triples


architecture


EABI:Embedded Application Binary Interface(嵌入式应用程序二进制接口)


ABI:Application Binray interface


  • API:库的使用者可能需要去遵循这个接口规范,Add函数的参数个数以及参数类型等等。


  • ABI:main使用到了Add这个API,这个API包含再一个myso动态库里面,现在设计到一个符号寻找机制,即编译器需要去myso动态库里面寻找Add这个符号,那符号的命名规则不一致会导致什么结果?如gcc1.0版本的符号命名规则是再函数前面加一个_,即最后Add符号名称_Add, gcc2.0版本的符号命名规则是再函数后面加一个_, 即最后Add符号名称Add_。思考一个问题,myso是利用gcc1.0版本编译,main使用gcc2.0版本编译,会出现是什么问题? 编译器会提示你Add_符号未定义,这里说的符号导出规则也就是属于ABI兼容问题。


结论 :影响你API不兼容的可能是你使用的API新增了参数。影响ABI不兼容的可能仅仅就是编译器版本不同,一个是源码层面,一个是编译器层面(或者说二进制层面,即编译器生成的二进制), 当然编译器仅仅只是导致ABI不兼容的一个方面。



目录
相关文章
|
5月前
|
IDE Linux 开发工具
在Qt开发环境中qmake和cmake的区别优势
选择qmake还是CMake,主要取决于项目的需求和开发者的熟悉程度。如果你正在开发一个纯Qt项目,或者是一个不需要复杂构建脚本的小型项目,qmake可能是一个更好的选择。反之,如果你的项目需要处理复杂的依赖关系,或者你想要一个在多种编程环境中都能工作的构建系统,那么CMake可能是更好的选择。
823 2
|
XML Java 开发工具
AAPT2简介
AAPT2简介
|
6月前
|
存储 设计模式 前端开发
怎么根据MVC开发规则进行开发
MVC开发规则,也称为MVC设计模式,是软件工程中一种常用的架构模式,用于将应用程序划分为三个主要组成部分:模型(Model)、视图(View)和控制器(Controller)。这种架构模式有助于将应用程序的逻辑、数据和用户界面分离,使代码更加清晰、可维护,并且提高了应用程序的灵活性。
54 2
|
前端开发 Java 数据库
MVC开发模式
MVC开发模式
57 0
|
Linux 测试技术 Windows
【GTest】使用CMakeLitsts.txt构建Windows和Linux的跨平台GoogleTest项目(非常详细+亲测有效)
【GTest】使用CMakeLitsts.txt构建Windows和Linux的跨平台GoogleTest项目(非常详细+亲测有效)
159 0
|
IDE 编译器 开发工具
统信UOS系统开发笔记(四):从Qt源码编译安装之编译安装QtCreator4.11.2,并配置编译测试Demo
上一篇已经从Qt源码编译了Qt,那么Qt开发的IDE为QtCreator,本篇从源码编译安装QtCreator,并配置好构建套件,运行Demo并测试。
|
编译器 Linux 数据库
[✔️]FFMpeg编译32位踩坑指南
[✔️]FFMpeg编译32位踩坑指南
1083 0
|
前端开发 图形学 索引
[✔️]使用unity profile查看合批细节
[✔️]使用unity profile查看合批细节
309 0
|
XML Android开发 数据格式
|
Windows
CCS6.x工程项目便于移植的相对路径设置
刚开始接触嵌入式软件设计,只能从基础一步一步的来。本想着专门写一篇CCS的安装教程的,后来发现其他博客上都有介绍的,然后也都比较详细,参考:https://blog.csdn.net/sunshinefcx/article/details/80640240等等
552 0