链接程序和库指南

调用支持接口

链接编辑器可接受一个或多个通过 SGS_SUPPORT 环境变量或链接编辑器的 -S 选项提供的支持库。此环境变量由冒号分隔的支持库列表组成:


$ SGS_SUPPORT=./support.so.1:libldstab.so.1 cc ...

-S 选项用于指定单个支持库。可以指定多个 -S 选项:


$ LD_OPTIONS="-S./support.so.1 -Slibldstab.so.1" cc ...

支持库是共享库。链接编辑器会使用 dlopen(3C) 按照指定库的顺序打开每个支持库。如果遇到环境变量和 -S 选项,则首先处理通过此环境变量指定的支持库。然后,使用 dlsym(3C) 搜索每个支持库以查找所有支持接口例程。这些支持例程随后会在链接编辑的不同阶段调用。

支持库必须与所调用的链接编辑器的 ELF 类保持一致,可以是 32 位或 64 位。 有关更多详细信息,请参见32 位环境和 64 位环境


注 –

缺省情况下,链接编辑器使用 Solaris 支持库 libldstab.so.1 来处理和压缩输入可重定位目标文件内提供的编译器生成的调试信息。如果对使用 -S 选项指定的任何支持库调用链接编辑器,则抑制此缺省处理。如果除支持库服务之外还要求 libldstab.so.1 的缺省处理,请将 libldstab.so.1 显式添加到提供给链接编辑器的支持库列表中。


32 位环境和 64 位环境

32 位环境和 64 位环境中所述,64 位链接编辑器 ld(1) 可以生成 32 位目标文件,32 位链接编辑器可以生成 64 位目标文件。对于其中每个目标文件,都定义关联支持接口。

64 位目标文件的支持接口类似于 32 位目标文件的接口,但是以 64 为后缀结尾。例如 ld_start()ld_start64()。通过此约定,两种方式实现的支持接口可以分别位于 32 位类和 64 位类的单个共享库 libldstab.so.1 中。

可以为 SGS_SUPPORT 环境变量指定 _32_64 后缀,并且可以使用链接编辑器选项 -z ld32-z ld64 定义 -S 选项的要求。这些定义只能分别通过链接编辑器的 32 位或 64 位类来解释。通过此操作,可在可能不知道链接编辑器的类的情况下指定两类支持库。