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

退出打印视图

更新时间: 2014 年 7 月
 
 

直接绑定和插入

当已装入到进程中的不同动态目标文件中存在同一符号的多个同名实例时可能会发生插入。在缺省搜索模型下,符号引用被绑定到在已装入的依赖项系列中发现的第一个定义。这第一个符号被称为在同名的其他符号上的插入。

直接绑定可以禁用任何隐式插入。因为将在与引用关联的依赖项中搜索直接绑定的引用,所以会跳过启用了插入的缺省符号搜索模型。在直接绑定环境中,可以建立到具有相同名称的同一符号的不同定义的绑定。

能够绑定到具有相同名称的同一符号的不同定义是直接绑定的一个非常有用的功能。然而,如果某个应用程序依赖于一个插入实例,则使用直接绑定可能会破坏应用程序的预期执行。在决定为现有应用程序使用直接绑定之前,应当对应用程序进行分析以确定是否存在插入。

要确定应用程序内是否可能存在插入,请使用 lari(1)。缺省情况下,lari 输出受关注的信息。该信息源自同一符号定义的多个实例,这些实例可能会依次导致插入。

只有在绑定到符号的一个实例时才会发生插入。插入中可能不会涉及 lari 收集的同一符号的多个实例。其他多个实例符号可以存在,但可能不会被引用。这些未引用的符号仍然用作插入的候选者,因为将来的代码开发可能会引用这些符号。在考虑使用直接绑定时,应当对多次定义的符号的所有实例进行分析。

如果存在同一符号的多个同名实例,特别是已观察到插入时,应当执行下列操作之一。

  • 对符号实例进行本地化以消除名称空间冲突。

  • 删除多个实例以便只留下一个符号定义。

  • 显式定义任何插入需求。

  • 识别可以作为插入基础的符号以阻止直接绑定到该符号。

以下几节更详细地讨论了这些操作。