iOS 编译

373 阅读1分钟

iOS编译是从高级代码到机器码的一个操作。

在Xcode5之后,iOS采用的编译器是LLVM。

LLVM的前端是Clang,后端是LLVM。

前端主要负责语法分析,词法分析,生成中间码。

后端以中间码作为输入,进行架构无关的代码优化,争对不同架构生成不同的机器码。

编译的过程

1.预处理

加载项目的category,宏定义,删除注释

2.词法分析,语法分析,语义分析

词法分析器读入源文件的字符流,将他们组织成有意义的词素序列,词法分析器产生词法单元作为输出,并且用Loc来记录位置。 语法分析就是把词法分析生成的标记流,解析成一个抽象语法树(AST),AST是抽象语法树,结构上比代码更精简,遍历起来更快,AST适合静态检查。 语义分析是对语法树的处理,提高代码的质量。

3.中间码生成和优化

语义分析结束之后会生成IR(中间码).ll结尾的文件。

进入后端将.ll转为机器码,生成.o文件。

4.链接

链接器把产生的.o文件和(dylib,a,tbd)文件生成一个mach-o文件,编译结束。