Go to main content
Oracle® Solaris 11.3 リンカーとライブラリガイド

印刷ビューの終了

更新: 2015 年 10 月
 
 

出力ファイルの生成

入力ファイルの処理とシンボル解決がすべて重大なエラーが発生することもなく完了すると、リンカーは出力ファイルを生成します。リンカーは、出力ファイルの完成に必要な追加セクションをまず生成します。これらのセクションには、すべての入力ファイルから解決済みの大域およびウィークシンボル情報とともに局所シンボル定義を含むシンボルテーブルが含まれます。

また、実行時リンカーが必要とする、出力の再配置および動的情報セクションも組み込まれます。すべての出力セクション情報が設定された後、出力ファイルサイズの合計が計算されます。次に出力ファイルイメージが適宜作成されます。

動的実行可能プログラムまたは共有オブジェクトを作成するときに、通常、2 つのシンボルテーブルが生成されます。.dynsym とその関連文字列テーブル .dynstr には、レジスタ、大域シンボル、ウィークシンボル、およびセクションシンボルが組み込まれます。これらのセクションは、実行時処理イメージの一部としてマッピングされる text セグメントの一部となります。mmapobj(2) を参照してください。このマッピングにより、実行時リンカーは、これらのセクションを読み取り、必要な再配置を実行できます。

.symtab テーブルと、その関連文字列テーブル .strtab には、入力ファイル処理から収集されたすべてのシンボルが含まれています。これらのセクションは、プロセスイメージの一部として対応付けられません。これらのセクションは、リンカーの –z strip-class オプションを使用して、またはリンク編集後に strip(1) を使用してイメージから取り除くことができます。

予約シンボルは、シンボルテーブルの生成中に作成されます。これらのシンボルは、リンクプロセスに対して特別な意味を持っています。コードでは、これらのシンボルを定義しないでください。

_etext

すべての読み取り専用情報のあとの最初の場所は、一般にテキストセグメントと呼ばれます。

_edata

初期化されたデータのあとの最初の位置。

_end

すべてのデータのあとの最初の位置。

_DYNAMIC

.dynamic 情報セクションのアドレス。

_END_

_end と同じ。このシンボルは、_START_ シンボルとともに、ローカル範囲を持ち、オブジェクトのアドレス範囲を確立する簡単な手段を提供します。

_GLOBAL_OFFSET_TABLE_

リンカーが提供するアドレステーブル (.got セクション) への位置独立の参照。このテーブルは、–K pic オプションを指定してコンパイルしたオブジェクトで発生する、位置独立のデータ参照から構築されます。位置独立のコードを参照してください。

_PROCEDURE_LINKAGE_TABLE_

リンカーが提供するアドレステーブル (.plt セクション) への、位置独立の参照。このテーブルは、–K pic オプションを指定してコンパイルしたオブジェクトで発生する、位置独立の関数参照から構築されます。位置独立のコードを参照してください。

_START_

テキストセグメント内の最初の位置。このシンボルは、_END_ シンボルとともに、ローカル範囲を持ち、オブジェクトのアドレス範囲を確立する簡単な手段を提供します。

リンカーは、実行可能ファイルを生成するとき、追加シンボルを検出して実行可能ファイルのエントリポイントを定義します。シンボルがリンカーの –e オプションを使用して指定された場合、そのシンボルが使用されます。それ以外の場合は、リンカーは予約シンボル名 _startmain を検出します。