链接编辑器可接受一个或多个通过 SGS_SUPPORT 环境变量或链接编辑器的 –S 选项提供的支持库。此环境变量由冒号分隔的支持库列表组成:
$ SGS_SUPPORT=support.so.1:support.so.2 cc ....
–S 选项用于指定单个支持库。可以指定多个 –S 选项:
$ LD_OPTIONS="-Ssupport.so.1 -Ssupport.so.2" cc ....
支持库是共享目标文件。链接编辑器会使用 dlopen(3C) 按照指定库的顺序打开每个支持库。如果遇到环境变量和 –S 选项,则首先处理通过此环境变量指定的支持库。然后,使用 dlsym(3C) 搜索每个支持库以查找所有支持接口例程。这些支持例程随后会在链接编辑的不同阶段调用。
支持库必须与所调用的链接编辑器的 ELF 类保持一致,可以是 32 位或 64 位。有关更多详细信息,请参见32 位环境和 64 位环境。
如32 位环境和 64 位环境中所述,64 位链接编辑器 ld(1) 可以生成 32 位目标文件。此外,32 位链接编辑器可以生成 64 位目标文件。对于其中每个目标文件,都定义关联支持接口。
64 位目标文件的支持接口类似于 32 位目标文件的接口,但是以 64 为后缀结尾。例如 ld_start() 和 ld_start64()。通过此约定,两种方式实现的支持接口可以分别位于 32 位类和 64 位类的单个共享目标文件中。
可以为 SGS_SUPPORT 环境变量指定 _32 或 _64 后缀,并且可以使用链接编辑器选项 –z ld32 和 –z ld64 定义 –S 选项的要求。这些定义只能分别通过链接编辑器的 32 位或 64 位类来解释。通过此操作,可在可能不知道链接编辑器的类的情况下指定两类支持库。