新闻资讯

新闻资讯 行业动态

IOS探索 IOS静态库与动态库

编辑:008     时间:2020-02-26


1.编译过程

在日常开发过程中,开发者会使用成千上万次的Command + B/R进行开发调试,但可能很少有人关注过这个过程中Xcode帮我们做了哪些事情(iOS开发者往往会吐槽Xcode越来越难用了,但不得不承认它越来越强了)

事实上,这个过程分解为4个步骤,分别是预处理(Prepressing)、编译(Compilation)、汇编(Assembly)和链接(Linking).------ 摘自《程序员的自我修养-- 链接、装载与库》

在以上4个步骤中,IDE主要做了以下几件事:

  • 预编译:处理代码中的# 开头的预编译指令,比如删除#define并展开宏定义,将#include包含的文件插入到该指令位置等
  • 编译:对预编译处理过的文件进行词法分析、语法分析和语义分析,并进行源代码优化,然后生成汇编代码;
  • 汇编:通过汇编器将汇编代码转换为机器可以执行的指令,并生成目标文件.o文件
  • 链接:将目标文件链接成可执行文件。这一过程中,链接器将不同的目标文件链接起来,因为不同的目标文件之间可能有相互引用的变量或调用的函数,如我们经常调用Foundation框架和UIKit框架中的方法和变量,但是这些框架跟我们的代码并不在一个目标文件中,这就需要链接器将它们与我们自己的代码链接起来

Foundation和UIKit这种可以共享代码、实现代码的复用统称为库——它是可执行代码的二进制文件,可以被操作系统写入内存,它又分为静态库和动态库

2.静态库

静态库是指链接时完整的拷贝到可执行文件,多次使用多次拷贝,造成冗余,使包变的更大

如.a、.lib都是静态库

3.动态库

动态库是指链接时不复制,程序运行时由系统加在到内存中,供系统调用,系统只需加载一次,多次使用,共用节省内存。

如.dylib、.framework都是动态库


系统的framework是动态的,开发者创建的framework是静态的




原文链接:https://juejin.im/post/5e4b7b01f265da57301bece8
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

回复列表

相关推荐