CSAPP学习笔记:链接

链接

链接详解

静态链接例子

对于两个.c文件,如何形成可执行的目标文件呢?

在这里插入图片描述

在这里插入图片描述

两个源代码分别经过预处理编译器,编译编译器,汇编编译器,生成了两个可重定向的目标文件,再经过链接器,链接成可执行目标文件。(在编译过程中需要指定两个.c文件)

链接器优势

  1. 模块化:程序是由许多小的源文件组成,而不是大的单一文件。并且能构建包含许多函数的库。
  2. 提高效率:节省时间:当修改源文件时,只需要重新编译那个修改的源文件,而不需要重新编译其他源文件。节省空间:公用的函数压缩成库,函数调用库时,只需要加载库中的某一些函数。

链接器的工作步骤

  1. 符号解析(简单解析)
    1. 程序能够定义和引用符号(全局变量或者函数)
    2. 这些符号(全局变量/函数)的定义在目标文件(.o)中以符号表的形式保存着,每一个符号对应着名称,大小,符号位置(以structs形式)
    3. 在符号解析阶段,链接器将每一个符号引用和其定义(名称,大小,符号位置)一一对应。
  2. 重定位阶段
    1. 目的是将分开储存的数据和代码组合成单一区域
    2. 重定位:由符号的相对位置,找到其绝对位置
    3. 更新符号引用中的位置为它们的绝对位置??

一些定义

  • 三种目标文件(object files)(模块)

    • 重定向目标文件&
  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值