[✔️]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不兼容的一个方面。



目录
相关文章
|
2月前
|
开发框架 Unix Linux
深度探索:Qt CMake工程编译后的自动打包策略
深度探索:Qt CMake工程编译后的自动打包策略
98 0
|
前端开发 图形学 索引
[✔️]使用unity profile查看合批细节
[✔️]使用unity profile查看合批细节
224 0
|
编译器 Linux 数据库
[✔️]FFMpeg编译32位踩坑指南
[✔️]FFMpeg编译32位踩坑指南
832 0
|
Android开发 C语言
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(一)
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(一)
338 0
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(一)
|
XML Android开发 数据格式
|
Java 编译器 Linux
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)
283 0
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(二)
|
Java Android开发 C++
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(一)
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(一)
292 0
【CMake】CMake 引入 ( Android Studio 创建 Native C++ 工程 | C/C++ 源码编译过程 | Makefile 工具 | CMake 引入 )(一)
|
Android开发
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(二)
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(二)
224 0
Android Studio NDK 代码 Source Insight调试 (NDK 目前开发方案 | NDK 编译 | 导入 so 库 | 项目编码转换)(二)