リンカーとライブラリ

補助検索の縮小

補助フィルタ内で $ISALIST を使用すると、1 つあるいは複数のフィルタ対象が、フィルタ内で定義されたインタフェースの代替の実装を提供できます。

ただし、フィルタで定義されたインタフェースにフィルタ対象で定義された代替の実装がない場合は、要求されたインタフェースの場所を探すために、可能性のあるフィルタ対象すべてを徹底的に検索する結果となります。性能が重要となる機能を提供するためにフィルタ対象を使用する場合には、徹底的にフィルタ対象を検索することによって生産性が下がることがあります。

リンカーの -z endfiltee オプションを使用してフィルタ対象を作成し、それが使用可能な最後のフィルタ対象であると指定し、そのフィルタについてそれ以上のフィルタ対象検索を行わないようにできます。たとえば、前の SPARC の例で、sparcv9 フィルタ対象が存在し、-z endfiltee のタグが付いている場合、フィルタ対象検索は次のようになります。


$ ldd -ls prog
.....
 find library=libbar.so.1; required by ./libfoo.so.1
   search path=/opt/ISV/lib/$ISALIST  (RPATH from file ./libfoo.so.1)
     trying path=/opt/ISV/lib/sparcv9+vis/libbar.so.1
     trying path=/opt/ISV/lib/sparcv9/libbar.so.1