ARM可执行文件生成过程
资料:https://developer.android.google.cn/ndk/guides/other_build_systems?hl=zh-cn
1. 过程简述
ARM可执行文件的生成过程大概是四步:
- 预处理、编译、汇编、链接;
- 执行完这四步后就会得到一个可执行文件,就可以在手机上运行;
- 需要借助于clang来实现这个过程,在android ndk会有这个工具;可在如下路径找到它;
F:\android_sdk\ndk\27.1.12297006\toolchains\llvm\prebuilt\windows-x86_64\bin- 进入此路径可以查看clang的版本;

- 将它加入到环境变量中,即可在任意位置使用它;

- 在进行编译之前,写一个c代码;
#include <stdio.h>
int main(int argc, char const *argv[])
{
printf("hello sana");
return 0;
}- 以它为例进行演示;
2. 预处理-E
- 首先看看clang的基础命令;
-E Only run the preprocessor 仅运行预处理器
用法:#clang -E hello.c -o hello.i
作用:将hello.c预处理输出hello.i文件- 我们需要借助这个参数来进行预处理这一步,在文件目录打开终端输入以下命令;target是指定平台;
clang -target armv7a-linux-androideabi27 -E sana.c -o sana.i- 会得到一个 .i 文件,这时候其实与平台是没关系的,它是把头文件展开之后,处理源代码中的宏定义、文件包含和条件编译指令;
3. 编译-S
- 命令如下:
-S Only run preprocess and compilation steps 仅运行预处理和编译步骤clang -target armv7a-linux-androideabi27 -S sana.i -o sana.s- 这里会生成一个汇编文件,这里就与平台是相关的了;

4. 汇编-c
- 命令如下:
-c Only run preprocess, compile, and assemble steps 仅运行预处理、编译和组装步骤 clang -target armv7a-linux-androideabi27 -c sana.s -o sana.o - 他生成的其实就是ELF格式,将汇编代码转换为机器码(二进制指令),需通过链接器进一步处理;

- 可以判断一下它的类型;

- 这里的file命令是装了插件,可以推到手机上用file命令看,但是此时也是不能够执行的,需要执行最后一步;
5. 链接-o
- 命令:
clang -target armv7a-linux-androideabi27 sana.o -o hello- 此时再查看文件格式:

- 去测试一下是否是可执行的;

- 这里可以看到是输出了我们写的那句代码,证明就没问题;
- 另外,如需一步到位也是执行-o命令;
clang -target armv7a-linux-androideabi27 sana.c -o hello