前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >iOS强化: 编译与链接

iOS强化: 编译与链接

作者头像
网罗开发
发布2021-05-14 15:51:13
7610
发布2021-05-14 15:51:13
举报
文章被收录于专栏:网罗开发

1. 前言


上一节学习了 iOS强化 : 熟悉 Mach-O 文件, 对 Mach-O 有个大致的了解,今天来学习 Mach-O 可执行文件的生成过程 :编译与链接

知识参考:

  • iOS 底层探索:LLVM 入门
  • iOS App 加载流程知识

2. Mach-O 文件生成过程


链接的本质 :就是把多个⽬标⽂件组合成⼀个⽂件(Mach-O可执行文件)

目标文件 :通常.o文件被我们称之为目标文件

▐ 2.1 目标文件的生成过程

大概步骤:

  • 将代码汇编化
  • 将符号进行归类;此时地址还没有虚拟化(没有生成虚拟内存地址)。对于外部导入符号,它的调用地址无法得知,需要将其放到重定位符号表中
  • 生成一个或多个.o目标文件
  • 此时链接器(llvm-ld)并没有被执⾏
▐ 2.2 目标文件的生成过程
  • 多个目标文件合并
  • 符号表(包括重定位符号表)合并成一张表
  • 生成一个Mach-O可执行文件

3. 静态链接


代码经过编译链接最后分配虚拟内存地址生成可执行文件或动态库

4. 动态链接


在运行时,由dyld动态加载

静态/动态链接

5. 总结


  • 编译本质:将代码汇编化,并将符号进行归类。外部导入符号,放到重定位符号表。生成一个或多个.o目标文件
  • 链接本质:多个目标文件合并,符号表(包括重定位符号表)合并成一张表,生成一个Mach-O可执行文件

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 网罗开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • ▐ 2.1 目标文件的生成过程
  • ▐ 2.2 目标文件的生成过程
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档