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文件,编译结束。