リンカーとライブラリ

リンカーの起動

リンカーは、コマンド行から直接実行できます。また、コンパイラドライバを使用して実行することができます。以下の 2 つの項では、この両方の方法を詳しく説明していますが、コンパイル環境は、通常、複雑で、コンパイラドライバだけが認識する一連の操作の変更が行われる場合もあるため、後者の方法を選択されることをお勧めします。

直接起動

リンカーを直接的に起動させる場合は、出力を作成するために必要なすべてのオブジェクトファイルとライブラリを提供する必要があります。リンカーは、出力の作成に使用するつもりのオブジェクトモジュールまたはライブラリに関して、仮説を立てることをしません。たとえば、次のコマンドを発行するとリンカーは、入力ファイル test.o だけを使用して、a.out という動的実行可能ファイルを作成します。


$ ld test.o

a.out を有用な実行可能ファイルにするためには、これに初期設定および終了処理コードを組み込む必要があります。このコードは、言語またはオペレーティングシステム固有のもので、通常、コンパイラドライバによって提供されるファイルを通じて提供されます。

また、自分専用の初期設定および終了コードも指定できます。このコードは、実行時リンカーにより正確に認識され、使用できるようにするために、適切に暗号化およびラベル付けを行う必要があります。この暗号化とラベル付けも、コンパイラドライバによって提供されたファイルを通じて提供されます。

実際問題として、実行可能ファイルや共有オブジェクトなどの実行時オブジェクトを作成する場合は、コンパイルドライバを使用してリンカーを起動することをお勧めします。リンカーを直接起動をお勧めするのは、-r オプションを使用して、中間再配置可能オブジェクトを作成する場合だけです。

コンパイラドライバを使用する

リンカーを使用する従来の方法は、言語固有のコンパイラドライバを使用する方法です。入力ファイルとともに、cc(1)f77(1) などのコンパイラドライバを指定します。すると、コンパイルドライバは、追加ファイルとデフォルトライブラリを追加して、リンク編集を完了させます。これらの追加ファイルは、たとえば、以下のようにコンパイルの呼出しを拡張することによって参照できます。


$ cc -# -o prog main.o
/usr/ccs/bin/ld -dy /opt/COMPILER/crti.o /opt/COMPILER/crt1.o ¥ 
/usr/ccs/lib/values-Xt.o -o prog main.o ¥ 
-YP,/opt/COMPILER/lib:/usr/ccs/lib:/usr/lib -Qy -lc ¥ 
/opt/COMPILER/crtn.o

注 -

この例は、コンパイラドライバによって組み込まれた実際のファイルの例ですが、リンカー起動の表示に使用されるメカニズムによって異なる場合があります。