博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
iOS关于编译那些事儿
阅读量:7143 次
发布时间:2019-06-29

本文共 501 字,大约阅读时间需要 1 分钟。

当我们点击XCode的run的时候,他做了如下流程图的内容:

首先iOS使用的编译器而非解释器,好处的执行效率高,编译后生成机器码直接在CPU上运行. iOS使用的编译器是LLVM,他是一个工具链技术的集合,内置lld链接器.

LLVM中的Clang是编译器前端:它主要是进行预处理、词法分析、语法分析、语义分析、静态分析、生成中间代码。

LLVM的编译器后端:它将中间代码优化生成汇编代码,然后汇编器再将其生成机器代码,最近生成可执行文件.o即Mach-O文件。

链接器:链接器的作用主要有两个,一个是做符号绑定;另一个就是将多个Mach-O文件合并成一个. 符号可以看作是函数名和全局变量名,通关链接器与内存地址进行绑定.

总结一下编译过程就是:1.LLVM处理预处理命令,如嵌入宏;2.LLVM进行词法、语法、语义等的分析;3.生成AST;4.生成IR;5生成机器码即可执行文件Mach-O,链接器将多个Mach-O文件合并成一个.

另外说一下动态链接器dyld,他可以动态加载动态库,比如系统库都是运行是动态加载的.动态库的符号绑定可以在程序启动执行的时候绑定也可以符号第一次被用到的时候绑定.

转载地址:http://eszgl.baihongyu.com/

你可能感兴趣的文章
js中获取键盘事件
查看>>
面试(4)-spring-Spring面试题和答案
查看>>
请教 JTable 里的单元格如何使得双击进入单元格后,单元格的内容处于全选中状态...
查看>>
jQuery 各类判断函数汇总
查看>>
Android studio 分32位64位版本吗?
查看>>
UIcollectionView的使用(首页的搭建1)
查看>>
[原创]AM3352 + TPS65910 调试方法+调试记录
查看>>
.net基本数据类型操作
查看>>
docker 应用-2(Dockerfile 编写以及镜像保存提交)
查看>>
ubuntu 下安装查看pdf的工具
查看>>
UIApplication深入研究
查看>>
解决Ubuntu 12.04更新后 ”系统的网络服务与此版本的网络管理器不兼容“问题
查看>>
python变量
查看>>
牛顿迭代法
查看>>
mac os 中类似于Linux的yum工具,或ubuntu的apt-get工具Homebrew
查看>>
一种美-无法言语
查看>>
Unity场景渲染相关实现的猜想
查看>>
面向对象编程(十四)——面向对象三大特性之多态①
查看>>
单例模式
查看>>
Android 数据库 LiteOrm 的使用
查看>>