美文网首页
iOS 模块化(更新中)

iOS 模块化(更新中)

作者: 高浩浩浩浩浩浩 | 来源:发表于2023-04-27 11:08 被阅读0次

最近在对项目代码进行SDK抽离,又接触了很多新的知识,在这里记录下。

Xcode和编译过程的对应关系


OC的编译过程跟C是一致的。

中文 预编译 编译 汇编 链接
英文 Preprocess Compile Assembling Link
作用 处理文字 变汇编 转换成机器码 变可执行程序

编译是将人能读懂的Source Code变成机器能理解的汇编语言(寄存器指令),然后通过汇编变成目标机器的(Machine Code/Object Code),然后通过Link变为可执行程序的01010101….

Xcode头文件(预编译)


对于计算机来讲,头文件是不需要的

对于Xcode来说仅仅在 预编译编译 阶段需要头文件来进行静态检查是否存在有不知道的类或者方法

头文件的搜索目录可以通过配置Build Setting里的 Header Search Paths 来获取头文件,这个是磁盘目录,可以是电脑上的任意目录,无需添加任何文件进入Target


20160325_XcodeIntelliJLibrary04.png

Xcode Symbols(编译,汇编)


把每一个文件中的可执行代码进行 编译和汇编 可以得到 同名的.o文件, 其后缀o就是指的 Object Code

之所以称为Object,是因为不同的硬件有不同的架构,如x86和arm64,例如iPhone模拟器是x86而iPhone真机大部分都是arm的,也就是说在此时Xcode已经完成了架构的处理

Xcode Link(链接)


最终Xcode经过链接过程将.o文件组合起来,得到一个Mach-O文件(相当于一个压缩包) 并且生成 符号表

这个过程中存在两个常见的错误提示Undefined symbolsDuplicated symbols 将在后续讲解

Mach-O文件是Macintosh系统中的一个文件类型,用来描述程序的运行和二进制代码之间的关系

Mach-O 文件

根据Wiki描述Mach-O为Mach Object文件格式的缩写,其由卡耐基梅隆大学和Apple开发和维护

Mach-O格式 说明
Executable 可执行程序,可运行的App最终会变成这个
Bundle 不可以被Link的动态库,运行时可以通过NSBundle基于dlopen方法加载
StaticLibrary 静态链接,Xcode默认情况下.a库会使用
DynamicLibrary 动态链接,Xcode默认情况下.framework会使用
RelocatableObjectFile 是编译过程中的中间产物,就是.o文件
Mach-O文件的结构
Mach-O区域 权限 作用
TEXT r-x读和执行 保存mach-o的文件头可执行的code以及constant常量
DATA rw-读写 保存用于程序的全局和静态变量
LINKEDIT r–只读 保存该库meta data,用来表示怎么加载

相关文章

网友评论

      本文标题:iOS 模块化(更新中)

      本文链接:https://www.haomeiwen.com/subject/qdgvjdtx.html