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

印刷ビューの終了

更新: 2015 年 10 月
 
 

リンカーの起動

リンカーは、コマンド行から直接実行することもコンパイラドライバから呼び出すようにすることもできます。次の 2 つのセクションでは、この両方の方法を詳しく説明します。ただし、通常は、コンパイラドライバを使用することをお勧めします。コンパイル環境は、多くの場合、コンパイラドライバだけが認識し、頻繁に変化する複雑な操作の連続によって構成されています。


注 -  Oracle Solaris 11 から、さまざまなコンパイルコンポーネントが /usr/ccs/bin および /usr/ccs/lib から /usr/bin および /usr/lib に移動しました。しかし、元の ccs 名を参照するアプリケーションが存在します。互換性を維持するためにシンボリックリンクが使用されています。

直接起動

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

$ ld test.o

通常、動的実行可能ファイルには、特殊な起動コードおよび終了処理コードが必要です。このコードは、言語またはオペレーティングシステム固有のもので、通常、コンパイラドライバによって提供されるファイルを通じて提供されます。

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

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

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

リンカーを利用する一般的な方法は、言語固有のコンパイラドライバを使用する方法です。アプリケーションを構成する入力ファイルとともに、cc(1)、CC(1) などのコンパイラドライバを指定します。すると、コンパイラドライバは、追加ファイルとデフォルトライブラリを追加して、リンク編集を完了させます。これらの追加ファイルは、次のようにコンパイルの呼び出しを拡張することによって参照できます。

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

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

クロスリンク編集

このリンカーは SPARC または x86 を対象としたクロスリンカーで、32 ビットオブジェクトまたは 64 ビットオブジェクトにリンクできます。32 ビットオブジェクトと 64 ビットオブジェクトを混在させることはできません。同様に、1 つの機械タイプのオブジェクトのみが許可されます。

通常、コマンド行オプションではリンク編集のターゲットを区別する必要はありません。リンカーは、コマンド行の最初の入力再配置可能オブジェクトの ELF 機械タイプを使用して、操作するモードを制御します。mapfile またはアーカイブライブラリからだけ行われるリンクなどの特別なリンク編集は、コマンド行オブジェクトの影響を受けません。これらのリンク編集のデフォルトは、32 ビットのネイティブターゲットです。リンク編集ターゲットを明示的に定義するには、–z target オプションを使用します。