リンカーとライブラリ

概要

リンク編集プロセスにより、1 つまたは複数の入力ファイルから出力ファイルが作成されます。出力ファイルの作成は、入力ファイルによって提供される入力セクションとともに、リンカーに提供されたオプションによって指示されます。

ファイルはすべて、「実行可能なリンク書式 」(ELF) で表示されます。ELF 書式の詳細については、第 7 章「オブジェクトファイル」を参照してください。ただし、ここでの概要説明では、まず、2 つの ELF 構造、「セクション」と「セグメント」について紹介する必要があります。

セクションとは、ELF ファイル内で処理できる、最も小さな、分割できない単位のことです。セグメントとは、セクションの集合で、exec(2) または実行時リンカー ld.so.1(1) によってメモリーイメージに対応付けできる (mmap(2) のマニュアルページを参照) 最小の一単位を表します。

ELF セクションには多くのタイプがありますが、これらはすべて、リンク編集を基準にして次の 2 つのカテゴリに分類されます。

基本的には、リンカーにより、「プログラムデータセクション」が連結されて出力ファイルになります。「リンク編集情報セクション」は、リンカーによって解釈されて、別のセクションに修正されるか、またはこの後処理される出力ファイルで使用される新しい出力情報セクションが生成されます。

リンカーの、次のような単純な機能の内訳については、この章で説明します。

「セクション」と関連する「セクション」を連結して「セグメント」にするといった連結プロセスは、リンカー内のデフォルト情報を使用して実行されます。通常、ほとんどのリンク編集の場合、リンカーによって提供されるデフォルトの「セクション」と「セグメント」の処理で十分ですが、これらのデフォルトは、関連する mapfile を指定した -M オプションを使用して操作できます (詳細は、第 8 章「mapfile のオプション」を参照)。