可以在同一个共享目标文件中定义个别接口,这些接口可定义标准过滤器,以及定义辅助过滤器的个别接口。通过使用 mapfile 关键字 FILTER 和 AUXILIARY 来指定所需的 filtees,可以实现这种过滤器定义组合。
使用 –F 或 –f 选项将其所有接口都定义为过滤器的共享目标文件可以是标准过滤器,也可以是辅助过滤器。
共享目标文件可以定义单个接口以将其用作过滤器,同时还可以将目标文件的所有接口都定义为过滤器。在这种情况下,首先处理针对接口定义的单个过滤。如果无法针对单个接口过滤器建立 filtee,则针对过滤器的所有接口定义的 filtee 会在适用时提供回退。
例如,考虑 filter.so.1 过滤器。此过滤器使用链接编辑器的 –f 选项,针对 filtee filtee.so.1 将所有接口都定义为辅助过滤器。filter.so.1 还使用 mapfile 关键字 FILTER,针对 filtee foo.so.1 将单个接口 foo 定义为标准过滤器。filter.so.1 还使用 mapfile 关键字 AUXILIARY,针对 filtee bar.so.1 将单个接口 bar 定义为辅助过滤器。
对 foo 的外部引用会导致处理 filtee foo.so.1。如果在 foo.so.1 中找不到 foo,则不会进一步处理过滤器。在这种情况下,不会执行回退处理,因为已将 foo 定义为标准过滤器。
对 bar 的外部引用会导致处理 filtee bar.so.1。如果在 bar.so.1 中找不到 bar,则处理会回退到 filtee filtee.so.1。在这种情况下,会执行回退处理,因为已将 bar 定义为辅助过滤器。如果在 filtee.so.1 中找不到 bar,则最终会使用 filter.so.1 过滤器中的 bar 的定义来解析外部引用。