リンカーとライブラリ

アーカイブ処理

アーカイブは、ar(1) を使用して構築され、通常、アーカイブシンボルテーブルとともに再配置可能オブジェクトの集合で構成されます。このシンボルテーブルにより、これらの定義の提供するオブジェクトとシンボル定義との関係がわかります。デフォルトでは、リンカーを使用すると、アーカイブ構成要素を選択して抽出できます。リンカーがアーカイブを読み取る場合は、結合処理を完了させるために必要なアーカイブから、オブジェクトだけを選択するように作成された内部シンボルテーブル内の情報を使用します。1 つのアーカイブのすべての構成要素を明示的に抽出することもできます。

次のような場合に、リンカーはアーカイブから再配置可能オブジェクトを抽出します。

選択式アーカイブ抽出においては、ウィークシンボル参照では、-z weakextract オプションが発効されていない限り、アーカイブからの抽出は実行されません。詳細は、単純な解決を参照してください。


注 –

オプション -z weakextract-z allextract、および -z defaultextract により、複数のアーカイブ間でアーカイブメカニズムを切り替えることができます。


選択式アーカイブ抽出の場合、リンカーは、リンカーの内部シンボルテーブル内に蓄積されたシンボル情報を満たすために必要な、再配置可能オブジェクトを抽出するアーカイブを通る複数のパスを作成します。リンカーが、再配置可能オブジェクトを抽出せずに、アーカイブを通る完全なパスを作成すると、リンカーは次の入力ファイルの処理に移ります。

アーカイブが検出されたときに必要な再配置可能オブジェクトだけをアーカイブから抽出することから、入力ファイルリスト内でのアーカイブの位置が重要であることがわかります。コマンド行上のアーカイブの位置 を参照してください。


注 –

リンカーは、アーカイブを通る複数のパスを作成し、シンボルを解決しますが、このメカニズムは、ランダムに構成された再配置可能オブジェクトが組み込まれた大容量のアーカイブの場合には、非常にコストがかかります。このような場合は、lorder(1)tsort(1) などのツールを使用してアーカイブ内の再配置可能オブジェクトを配列し、リンカーが実行しなければならないパスの数を削減することができます。