Oracle® Solaris 11.2 链接程序和库指南

退出打印视图

更新时间: 2014 年 7 月
 
 
第 6 章

直接绑定

在基于动态可执行文件和许多依赖项构造进程的过程中,运行时链接程序必须将符号引用绑定到符号定义。缺省情况下,符号定义是通过简单搜索模型搜索的。通常,将搜索每个目标文件(从动态可执行文件开始),并按装入目标文件的顺序处理每个依赖项。自首次引入动态链接后一直在使用此模型。此简单模型通常会导致所有的符号引用被绑定到一个定义。绑定的定义是在已装入的依赖项系列中找到的第一个定义。

动态可执行文件已发展为更复杂的进程,其复杂程度远高于在动态链接尚处于起步阶段时所开发的可执行文件。依赖项的数目已从几十增长到了几百。动态目标文件之间引用的符号接口的数目也有了大幅增长。符号名称的大小也随着用来支持语言(例如 C++)的技术(例如名称改编)有了显著增长。由于符号引用被绑定到符号定义,因此对于许多应用程序来说,这些因素导致启动时间增加。

进程内符号数目的增加还导致了名称空间污染的增加。多个符号实例具有相同的名称正变得越来越常见。由具有相同符号的多个实例产生的意外的错误绑定经常导致难以对进程故障进行诊断。

此外,现有的进程的各个目标文件需要绑定到多次定义的同名符号的不同实例。

为解决缺省搜索模型的开销问题,同时提供更大的符号绑定灵活性,已创建了一个替代的符号搜索模型。该模型称为直接绑定

使用直接绑定,可以在进程的目标文件之间建立准确的绑定关系。通过杜绝关联目标文件的意外绑定,直接绑定关系可以帮助避免任何意外的名称空间冲突。这一保护机制增加了进程内目标文件的可靠性,有助于避免意外的难以诊断的绑定情况。

直接绑定可以影响插入。使用直接绑定可以避免意外插入。不过,直接绑定可以禁用有意插入。

本章介绍了直接绑定模型,并讨论了转换目标文件以使用该模型时应考虑的插入问题。