JavaScript is required to for searching.
跳过导航链接
退出打印视图
链接程序和库指南     Oracle Solaris 10 8/11 Information Library (简体中文)
search filter icon
search icon

文档信息

前言

1.  Oracle Solaris 链接编辑器介绍

2.  链接编辑器

3.  运行时链接程序

4.  共享目标文件

5.  应用程序二进制接口与版本控制

6.  支持接口

7.  目标文件格式

8.  线程局部存储

9.  Mapfile

A.  链接编辑器快速参考

B.  版本控制快速参考

命名约定

定义共享目标文件的接口

共享目标文件的版本控制

现有(非版本化)共享目标文件的版本控制

更新版本化共享目标文件

添加新符号

内部实现更改

新符号和内部实现更改

将符号迁移到标准接口

C.  使用动态字符串标记建立依赖性

D.  直接绑定

E.  System V 发行版 4(版本 1)Mapfile

F.  链接程序和库的更新及新增功能

索引

共享目标文件的版本控制

确定共享目标文件的可用接口后,可以使用 mapfile 和链接编辑器的 -M 选项创建关联的版本定义。有关此 mapfile 语法的介绍,请参见SYMBOL_SCOPE / SYMBOL_VERSION 指令

以下示例定义了共享目标文件 libfoo.so.1 中的供应商公共接口:

$ cat mapfile
$mapfile_version 2
SYMBOL_VERSION SUNW_1.1 {                   # Release X.
        global:
                foo2;
                foo1;
        local:
                *;
};
$ cc -G -o libfoo.so.1 -h libfoo.so.1 -z text -M mapfile foo.c

全局符号 foo1foo2 指定给共享目标文件的公共接口 SUNW_1.1。输入文件中提供的任何其他全局符号均通过自动缩减指令 "*" 缩减到局部。请参见缩减符号作用域


注 - 每个版本定义的 mapfile 项均应带有一个注释,用于反映更新的发行版或日期。可利用此信息将多个共享目标文件更新整合(可能由不同的开发者进行)到一个版本定义中,从而使共享目标文件的发布作为软件发行的一部分进行。


现有(非版本化)共享目标文件的版本控制

对现有的非版本化共享目标文件进行版本控制需要格外小心。上一个软件发行版中提供的共享目标文件已使其所有全局符号可供其他目标文件绑定。尽管可以确定共享目标文件的目标接口,但其他目标文件可能已发现其他符号并绑定到这些符号。因此,删除任何符号都可能会导致应用程序无法传送新的版本化共享目标文件。

如果可以确定并应用接口,而不中断任何现有应用程序,则可以对现有的非版本化共享目标文件进行内部版本控制。运行时链接程序的调试功能对验证各种应用程序的绑定要求非常有用。请参见调试功能。但是,确定现有绑定要求会假定共享目标文件的所有用户都是已知的。

如果无法确定现有的非版本化共享目标文件的绑定要求,则应使用新的版本化名称创建一个新的共享目标文件。请参见协调版本化文件名。除了这个新的共享目标文件外,还必须传送原始共享目标文件,以满足任何现有应用程序的依赖性。

如果要冻结原始共享目标文件的实现,则只需维护和传送共享目标文件二进制文件。但是,如果原始共享目标文件需要更新,则更适合使用从中生成共享目标文件的备用源树。修补程序升级可能需要更新,只有升级共享目标文件的实现才能与新平台保持兼容时也可能要更新。