连接器

先决条件—— 编译器设计简介 链接器是系统中的一个程序,它帮助将程序的目标模块链接到单个目标文件中。它执行链接过程。链接器也称为链接编辑器。链接是将一段代码和数据收集并维护到单个文件中的过程。链接器还将特定模块链接到系统库中。它将来自汇编程序的对象模块作为输入,并形成一个可执行文件作为加载程序的输出。

null

链接在编译时(源代码被翻译成机器代码)和加载时(程序被加载程序加载到内存中)执行。链接是在编译程序的最后一步执行的。

源代码->编译器->汇编程序->目标代码->链接器->可执行文件->加载程序

链接有两种类型: 1.静态链接- 它是在编译源程序的过程中执行的。在静态链接中,链接是在执行之前执行的。它获取可重定位对象文件和命令行参数的集合,并生成可加载和运行的完全链接的对象文件。

静态链接器执行两项主要任务:

  • 符号分辨率- 它将每个符号引用与一个符号定义相关联。每个符号都有预定义的任务。
  • 搬迁—— 它会重新定位代码和数据段,并将符号引用修改为重新定位的内存位置。

链接器将程序中使用的所有库例程复制到可执行映像中。因此,它需要更多的内存空间。因为它在运行时不需要系统上有库。因此,它更快、更便携。没有失败的机会,错误的机会更少。

2.动态链接- 动态链接在运行时执行。这种链接是通过在可执行映像中放置可共享库的名称来实现的。错误和失败的可能性更大。它需要更少的内存空间,因为多个程序可以共享库的一个副本。

在这里,我们可以执行代码共享。这意味着我们在程序中多次使用同一个对象。每个模块与具有相同对象的其他模块共享一个对象的信息,而不是一次又一次地将同一对象链接到库中。链接所需的共享库存储在虚拟内存中以节省RAM。在这个链接中,我们还可以重新定位代码,以使代码顺利运行,但所有代码都不可重新定位。它在运行时修复地址。

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享