リンカーとライブラリ

概要

共有オブジェクトは、リンカーによって作成される出力形式の 1 つであり、-G オプションを指定して生成されます。次に例を示します。


$ cc -o libfoo.so.1 -G -K pic foo.c

ここで、共有オブジェクト libfoo.so.1 は、入力ファイル foo.c から生成されます。


注 -

これは、共有オブジェクトを生成する非常に簡単な例です。通常は、追加オプションを使用することをお勧めします。これらのオプションについては、以下の節で説明します。


共有オブジェクトとは、1 つまたは複数の再配置可能なオブジェクトから生成される表示できないユニットです。共有オブジェクトは、動的実行可能ファイルと結合して実行可能プロセスを形成することができます。共有オブジェクトは、その名前が示すように、複数のアプリケーションによって共有できます。このように共有オブジェクトの影響力は非常に大きくなる可能性があるため、この章では、リンカーのこの出力形式について前の章よりも詳しく説明します。

共有オブジェクトを動的実行可能ファイルや他の共有オブジェクトに結合するには、まず共有オブジェクトが必要な出力ファイルのリンク編集に使用可能でなければなりません。このリンク編集中、入力共有オブジェクトはすべて、作成中の出力ファイルの論理アドレス空間に追加された場合のように解釈されます。つまり、共有オブジェクトのすべての機能が、出力ファイルにとって使用可能になります。

これらの共有オブジェクトは、この出力ファイルの依存関係になります。出力ファイル内には、この依存関係を記述するための少量の登録情報が保持されます。実行時リンカーは、この情報を解釈し、実行可能プロセス作成の一部として、これらの共有オブジェクトの処理を完了します。

次の節では、コンパイル環境と実行時環境内での共有オブジェクトの使用法について詳しく説明します (これらの環境については、「共有オブジェクト」を参照)。ここでは、共有オブジェクトの効率を最大にするための手法とともに、これらの環境内における共有オブジェクトの使用の調整に役立つ事項について説明します。