更加了解的iOS编译

2022-08-19  本文已影响0人  崔又淇

iOS编译

编译器

一般编译器由三部分构成,从源码到机器码经过一下三部分:

编译器结构

LLVM

LLVM的一般是指LLVM的整个架构,但一般指LLVM的后端。

LLVM结构图.png

如图所示,不同的前后端使用统一的IR文件,这样中间优化阶段都不需要修改,这样只要新增前后端就可以了。

Clang

Clang是LLVM项目的子项目,是C系列(C、C++、OC)的编译器前端。

主要流程

Clang执行的主要流程如图所示:


clang执行的主要流程.png

SwiftC

SwiftC是swift语言的编译器前端。

主要流程

SwiftC主要流程.png

IR

LLVM IR 有三种表现形式:

LLVM后端主要流程

LLVM后端主要流程.png

BitCode

BitCode 其实就是 IR 代码的一种编码形式。 BitCode 是以 section 形式保存在可执行文件中。当我们把携带 BitCode 的 App 提交到 AppStore 后,苹果会提取出可执行文件中的 BitCode 段,然后针对不同的 CPU 架构编译和链接成不同的可执行文件变体(Variant),不同 CPU 架构的设备会自动选择合适的架构的变体进行下载。而在 BitCode 之前,我们都是把所有需要的 CPU 架构集合打包成一个 Fat Binary,结果就是用户最终下载的安装包之中有很多冗余的 CPU 架构支持代码。开启BitCode之后,编译器后端(Backend)的工作都由 Apple 接管。

链接

iOS编译简析

上一篇 下一篇

猜你喜欢

热点阅读