リンカーは、SGS_SUPPORT 環境変数またはリンカーの –S オプションのどちらかによって提供される 1 つまたは複数のサポートライブラリを受け入れます。環境変数は、コロンで区切られたサポートライブラリのリストから構成されています。
$ SGS_SUPPORT=support.so.1:support.so.2 cc ....
–S オプションは、単一のサポートライブラリを指定します。複数の –S オプションを指定できます。
$ LD_OPTIONS="-Ssupport.so.1 -Ssupport.so.2" cc ....
サポートライブラリは、共有オブジェクトの 1 つです。リンカーは、dlopen(3C) を使用して、各サポートライブラリを指定された順序で開きます。環境変数と –S オプションの両方がある場合は、環境変数によって指定されたサポートライブラリが最初に処理されます。次に、各サポートライブラリ内で、dlsym(3C) を使用してサポートインタフェースルーチンの検索が実行されます。これらのサポートルーチンは、リンク編集の各段階で呼び出されます。
サポートライブラリは、32 ビットまたは 64 ビットのいずれの場合でも、呼び出されるリンカーの ELF クラスと一致している必要があります。詳細は、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 ビットのリンカーによってのみ解釈されます。このため、リンカーの種類が不明な場合に、両方の種類のサポートライブラリを指定できます。