Linking

Example C Program

Static Linking

Why Linkers?

那么我们为什么这样做的,为什么允许这种所谓的分离编译,为什么不喜欢一个包含所有代码的大文件。

Reason 1: Modularity模块化

  • 允许将代码分解成更小的部分
  • 创建共有函数的库,比如Math 库, 标准 C 库

Reason 2: Efficiency效率

  • 分离编译,只改变一个源文件,编译后再连接整合;不需要重新编译其他文件
  • 使用标准库中的所有功能,可以将它们放在一起

What Do Linkers Do?

在符号解析阶段,链接器将符号引用和符号定义相关联,这中间可能会有一些问题,比如在多个模块中,你可能会声明一个有相同名称的全局变量,链接器必须决定将其中的某个定义用于所有后续索引。

在重定位步骤器件,链接器会决定当程序运行时,每个符号最终将位于x中的存储区的哪里,并且它将那些绝对存储器位置绑定到符号。

Three Kinds of Object Files (Modules)

Linker Symbols

Step 1: Symbol Resolution

How Linker Resolves Duplicate Symbol Definitions

Linker’s Symbol Rules

Step 2: Relocation

Relocation Entries

这里的重点是链接器有足够的信息来实际填充正确的地址。

Packaging Commonly Used Functions

Modern solution: shared libraries

Dynamic Linking at Load-time

在分享库的解决办法中,我们首先要创建一个共享库而不是一个archive文件,我们创建一个.so文件,使用gcc的共享参数-shared

(到这里我听的人晕了哈哈哈哈)

Case study: Library interpositioning

库打桩的目的是截获来自库的函数调用,以及处于某种原因截获它们后做一些事情,我们通常想要做的就是截获一个函数调用,也许记录一些统计数据或者是做一些错误检查。

Some Interpositioning Applications

老师说这是一种非常酷的技术,但是我全程(懵逼)!之后有时间再看一次吧,应该会懂的更多一点。

CMU 15-213 Introduction to Computer Systems学习笔记(12) Linking相关推荐

  1. Introduction to Computer Networking学习笔记(十五):Queue Model 包交换中的缓冲模型

    本章知识点比较零散,因此一篇文章进行总结,并且不具有连贯性,仅记录自己认为有价值的内容. 将较大的包拆分为小包进行传输,可以减小端对端延迟,原因如下图: 数据传输时,突发大量的数据包会增加延迟,简单周 ...

  2. Linux学习笔记12——配置ftp、squid、Tomcat、Samba、MySQL主从

    Linux学习笔记12 Linux学习笔记12 配置FTP服务 配置pure-ftpd 开机启动 上传下载文件 配置vsftpd CentOS 70安装配置Vsftp服务器 搭好vsftp之后出现55 ...

  3. golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题

    golang学习笔记12 beego table name `xxx` repeat register, must be unique 错误问题 今天测试了重新建一个项目生成新的表,然后复制到旧的项目 ...

  4. HALCON 20.11:深度学习笔记(12)---语义分割

    HALCON 20.11:深度学习笔记(12)--- 语义分割 HALCON 20.11.0.0中,实现了深度学习方法. 本章解释了如何使用基于深度学习的语义分割,包括训练和推理阶段. 通过语义分割, ...

  5. 台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep?

    台大李宏毅Machine Learning 2017Fall学习笔记 (12)Why Deep? 本博客整理自: http://blog.csdn.net/xzy_thu/article/detail ...

  6. Kotlin学习笔记12——数据类和密封类

    Kotlin学习笔记12--数据类和密封类 前言 数据类 在类体中声明的属性 复制 componentN 解构声明 密封类 尾巴 前言 上一篇,我们学习了Kotlin中的拓展,今天继续来学习Kotli ...

  7. R语言小白学习笔记12—概率分布

    R语言小白学习笔记12-概率分布 笔记链接 学习笔记12-概率分布 12.1 正态分布 12.2 二项分布 12.3 泊松分布 12.4 其他分布 笔记链接 学习笔记1-R语言基础. 学习笔记2-高级 ...

  8. ros学习笔记12——python实现发布和接收ros topic

    ros学习笔记12--python实现发布和接收ros topic 一.简单demo 1.工作空间是存放工程开发的相关文件的文件夹 2.创作工作空间指令 3 .创建功能包 4. 创建Topic的订阅发 ...

  9. 【计算机网络学习笔记12】交换技术(上)

    [计算机网络学习笔记12]交换技术(上) 经典局域网的交换技术 概念 以太网是由Xerox公司创建并由Xerox.intel和DEC公司联合开发的基带局域网规范,是当今现有局域网采用的最通用的通信协议 ...

  10. 软件测试工程师学习笔记12 - 数据库篇

    软件测试工程师学习笔记 -12 一.入门必读 二.Linux 三.数据库 1.MySQL基础 1)别名与重复记录 2)条件查询 3)聚合函数 4)数据分组 5)一个练习 6)分组后的数据筛选 7)数据 ...

最新文章

  1. codevs1137 计算系数
  2. 贾扬清加盟AI开发者大会!早鸟票抢购正式开启
  3. MySQL server has gone away报错原因分析及解决办法
  4. mac插网线不能上网_实现两个无线路由器之间的连接,最稳定的方式是使用网线连接...
  5. sgs 0.9.9 在 Eclipse中调试
  6. 再次记录 Visual Studio 2015 CTP 5 的一个坑
  7. E - The Imp(博弈/动态规划)
  8. 【转】phpize学习
  9. 三校生计算机对口本科有哪些学校,宝山三校生五月对口高考报名
  10. 利用networkx求解网络的重叠度
  11. python debug工具_极简Python DeBug工具——PySnooper
  12. 海思3559AV100上运行自己训练的yolov3
  13. 【VBA编程实例】 如何导出百度云盘的目录
  14. java提示程序包有问题_如何解决安装java时出现程序包有问题不能运行的问题?...
  15. 计算机英语听力速记...,2018计算机考研英语听力速记技巧才是王道
  16. 2022-2027年中国重卡行业市场深度分析及投资战略规划报告
  17. 2018_7_5 自撰imrotate和bwlabel的matlab代码实现
  18. MySQL官方提供的日志分析工具_MySQL 日志分析的几款工具-Fun言
  19. var,let const,const 变量提升
  20. canvas教程6-绘制圆弧

热门文章

  1. 练习: 将一个int[] 中元素,转成字符串格式
  2. android显示当前时间
  3. nancy中的本地化
  4. Unity3D研究院之2D游戏开发制作原理(二十一) 【转】
  5. NYOJ71-独木舟上的旅行
  6. java 8种元素_从Java 8流中获取第n个元素
  7. 数据库索引是什么,它的作用是什么?
  8. 从开发到发布一款基于Vue2x的图片预览插件
  9. YII2中behavior行为的理解与使用
  10. MySQL5.6 新特性之GTID