首先回顾一下连接器(linker)的基础知识:编译器首先创建一个输出文件。在这个输出文件中包含了一个可重定位的对象,这个对象就是与源程序对应的数据和机器指令。
连接器位于 编译器的哪一个阶段 ?
绝大数的编译器并不是一个单一的庞大的程序,而是由六,七个小程序组成的。这些小的程序是由一个叫做“编译器驱动器控制器的程序”来调用的。这些组成编译器的程序有:编译预处理器( preprocesser),语法语义检查器(syntactic and semantic checker ),代码生成器(code genrator),汇编程序,优化器,连接器,当然还包括一个调用各个程序并向各个程序传递正确选项的驱动器程序(driver progarm).
动态连接的优点:
动态连接的是一种更为现代的方法,它的可执行的文件的体、体积很小。虽然文件的执行速度变得很慢,但是动态连接的可以很 有效的利用磁盘的空间,并且在连接——编辑的时间也缩短了(因为连接的有些工作被放在载入的时候了)。
动态连接的目的之一是ABI
动态连接的目的就是把应用程序从它们实用的特定的版本中分离开。取而代之的是我们约定一个一个接口。这个接口保持稳定。这个不随操作系统的版本改变而改变。程序可以调用接口提供的服务,而不必去了解它们呢是咋样提供服务,以及它们的底层的功能是如何实现的。由于它是介于应用程序以及二进制的函数二进制的可执行文件的接口,所以可以称它为应用程序二进制接口)