链接程序和库指南

特定于硬件功能的共享库

动态标记 $HWCAP 可用于指定特定于硬件功能的共享库所在的目录。此标记可用于过滤器和依赖项。由于此标记可以扩展到多个目标文件,因此它与依赖项一起使用时应受到控制。通过 dlopen(3C) 获取的依赖项可以在 RTLD_FIRST 模式下使用此标记。使用此标记的显式依赖项将装入找到的第一个适当的依赖项。

路径名称指定必须包含以 $HWCAP 标记结束的全路径名。由 $HWCAP 标记指定的目录中的共享库将在运行时受到检查。这些目标文件应指明其硬件功能要求。 请参见标识硬件和软件功能。将根据可用于此进程的硬件功能验证每个目标文件。适用于进程的那些目标文件按其硬件功能值的降序进行排序。这些已排序的 filtee 用于解析过滤器内定义的符号。

硬件功能目录中的 filtee 在命名方面没有限制。以下示例说明了如何设计辅助过滤器 libfoo.so.1 以使其访问硬件功能 filtee。


$ LD_OPTIONS='-f /opt/ISV/lib/hwcap/$HWCAP' \

cc -o libfoo.so.1 -G -K pic -h libfoo.so.1 -R. foo.c

$ dump -Lv libfoo.so.1 | egrep "SONAME|AUXILIARY"

  [1]    SONAME    libfoo.so.1

  [2]    AUXILIARY /opt/ISV/lib/hwcap/$HWCAP

$ elfdump -H /opt/ISV/lib/hwcap/*



/opt/ISV/lib/hwcap/filtee.so.3:



Hardware/Software Capabilities Section:  .SUNW_cap

     index  tag               value

       [0]  CA_SUNW_HW_1     0x1000  [ SSE2 ]



/opt/ISV/lib/hwcap/filtee.so.1:



Hardware/Software Capabilities Section:  .SUNW_cap

     index  tag               value

       [0]  CA_SUNW_HW_1     0x40  [ MMX ]



/opt/ISV/lib/hwcap/filtee.so.2:



Hardware/Software Capabilities Section:  .SUNW_cap

     index  tag               value

       [0]  CA_SUNW_HW_1     0x800  [ SSE ]

如果在具有 MMXSSE 功能的平台上处理过滤器 libfoo.so.1,则出现以下 filtee 搜索顺序。


$ cc -o prog prog.c -R. -lfoo

$ LD_DEBUG=symbols prog

.....

debug: symbol=foo;  lookup in file=libfoo.so.1  [ ELF ]

debug: symbol=foo;  lookup in file=hwcap/filtee.so.2  [ ELF ]

debug: symbol=foo;  lookup in file=hwcap/filtee.so.1  [ ELF ]

.....

请注意,filtee.so.2 的功能值大于 filtee.so.1 的功能值。由于 SSE2 功能不可用,因此 filtee.so.3 不会包括在符号搜索中。

减少 filtee 搜索

通过在过滤器内使用 $HWCAP,可使一个或多个 filtee 实现过滤器内定义的接口。

指定的 $HWCAP 目录中的所有共享库都会被检查,以验证其可用性并对找到的那些适用于进程的目标文件进行排序。排序后,将装入所有目标文件以备使用。

可以使用链接编辑器的 -z endfiltee 选项生成 filtee,以指明它是最后一个可用的 filtee。使用此选项标识的 filtee 将终止此过滤器的已排序 filtee 列表。不会为过滤器装入任何排在此 filtee 之后的目标文件。在前面的示例中,如果使用 -z endfiltee 标记了 filter.so.2 filtee,则 filtee 搜索将如下所示:


$ LD_DEBUG=symbols prog

.....

debug: symbol=foo;  lookup in file=libfoo.so.1  [ ELF ]

debug: symbol=foo;  lookup in file=hwcap/filtee.so.2  [ ELF ]

.....