您的位置:首页 > 移动开发 > Android开发

[Cmake-Android]SDK,NDK基本介绍

2019-05-18 14:43 2606 查看
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/adolph_lu/article/details/90315151

SDK常用目录

  • platform-tools:该文件夹下存放了Android平台的相关工具,比如adb.exe,sqlite3.exe等。
  • platforms:不同版本的SDK
  • ndk-bundle:ndk目录
  • tools:Android开发,调试的工具,性能监控
  • sources:当前版本的源码

 

NDK

Android NDK是一套允许您使用原生代码语言(例如C,C++)实现部分应用的工具集。在开发某些类型的应用时(比如音视频应用),可以重复使用以这些语言编写的代码库。

NDK常用目录(ndk-bundle)

  • platforms:系统依赖库
  • toolchains:交叉编译工具, gcc ,ld

 

交叉编译

交叉编译:就是在一个平台(如PC)上生成另一个平台(Android,Ios或者其他嵌入设备)的可执行 代码。

比如: 在x86的机器上编译出arm上的程序

           在linux平台上编译arm上的程序

无论是自行安装PC上的编译器,还是下载其他平台(Android或者iOS)的交叉工具编译链,它们都会提供以下几个工具:CC、AS、AR、LD、NM、GDB。

CC:编译器,对C源文件进行编译处理,生成汇编文件。

AS:将汇编文件生成目标文件(汇编文件使用的是指令助记符,AS将它翻译成机器码)。

AR:打包器,用于库操作,可以通过该工具从一个库中删除或者增加目标代码模块。

LD:链接器,为前面生成的目标代码分配地址空间,将多个目标文件链接成一个库或者是可执行文件。

GDB:调试工具,可以对运行过程中的程序进行代码调试工作。

STRIP:以最终生成的可执行文件或者库文件作为输入,然后消除掉其中的源码。

NM:查看静态库文件中的符号表。

Objdump:查看静态库或者动态库的方法签名。

 

交叉编译中有两个需要注意的点:

第一:在哪个平台上运行交叉编译工具

第二:编译的程序是在哪个平台上执行

 

动态库:在编译的时候只把库函数的地址写到执行文件当中,在运行的时候再根据库函数的地址去加载动态链接库

静态库:在编译的时候直接把源码复制到执行文件或者库当中

 

应用二进制界面(ABI)

  • 不同的Android手机使用不同的CPU, 因此支持不同的指令集。
  • CPU与指令集的每种组合都有其自己的应用二进制界面,即ABI

ABI包含以下信息:

  • CPU指令集
  • 内存字节顺序
  • 可执行二进制文件的格式
  • 解析的各种约定。对齐限制,堆栈使用和调用函数
  • 库集

支持的ABI

每个 ABI 支持一个或多个指令集。如下表:

 

NEON

NEON 提供标量/矢量指令和寄存器(与 FPU 共享,armeabi默认),主要用来进行浮点运算

-mfpu = vfp (浮点协处理器)

-mfpu = neon 指定是否使用neon

-march = armv7-a

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: