リンカーとライブラリ

関連情報

動的リンク

動的リンクとは、通常、実行可能プロセスを生成する際に、動的実行可能ファイルと共有オブジェクトの実行時リンクとともに、これらのオブジェクトを生成するリンク編集プロセスの一部分を受け入れる場合に使用する用語です。動的リンクを使用すると、実行時にアプリケーションを共有オブジェクトへ結合できるようにすることによって、共有オブジェクトが提供するコードを複数のアプリケーションで使用できます。

標準ライブラリのサービスからアプリケーションを切り離すことにより、動的リンクも、アプリケーションの移植性および拡張性を向上させることができます。サービスの「インタフェース」とその「実現」を切り離すことにより、システムが、アプリケーションの安定性を維持しながら展開することが可能になります。これは、「アプリケーションのバイナリインタフェース」(ABI) を提供する場合に、非常に重要な要素になります。動的リンクは、Solaris アプリケーションのコンパイルメソッドよりも優先されます。

アプリケーションのバイナリインタフェース

システムとアプリケーションコンポーネントの非同期展開を可能にするには、これらの装置間のバイナリインタフェースを定義します。Solaris リンカーは、これらのインタフェース上で稼動し、実行できるようにアプリケーションを組み合わせます。Solaris リンカーが処理するコンポーネントにはすべてバイナリインタフェースがありますが、このようなインタフェースファミリーの 1 つで、特にアプリケーションライターに有用なものとして、「System V アプリケーションバイナリインタフェース」があります。

「System V アプリケーションのバイナリインタフェース」、または ABI は、コンパイルされたアプリケーションプログラム用にシステムインタフェースを定義します。その目的は、標準バイナリインタフェースを「System V Interface Definition, Third Edition」を実現するシステム上のアプリケーションプログラム用に文書化することです。Solaris では、ABI 準拠アプリケーションを生成し、実行できます。SPARCTM システムでは、ABI は「SPARC Compliance Definition」(SCD) サブセットとして組み込まれています。

この後の章で説明するトピックの多くは、ABI の影響を受けています。詳細については、該当する ABI マニュアルを参照してください。

32 ビットおよび 64 ビット環境

リンカーは 32 ビットのオブジェクト上で動作し、SPARCV9 システム上では 64 ビットのオブジェクト上でも動作します。実際には、SPARC システムでは 64 ビットのリンカー (ld(1)) は 32 ビットのオブジェクトを、32 ビットのリンカーは 64 ビットのオブジェクトを生成できます。ただし、32 ビットのリンカーの場合、生成されるオブジェクトのサイズが、.bss を含めずに 2G バイトまでに制限されます。

一般に、32 ビットのリンク編集と 64 ビットのリンク編集を区別するために必要となるコマンドラインオプションはありません。リンカーは、最初に見つけた ELF オブジェクトの ELF クラスを使用して動作モードを管理します。mapfile やアーカイブライブラリのみからのリンクなどの、特別なリンク編集では、それらの入力ファイルの影響を受けず、デフォルトで 32 ビットモードになります。これらのケースでは、-64 オプションで 64 ビットのリンク編集を行うことができます。32 ビットオブジェクトと 64 ビットオブジェクトを混在させることはできません。

通常、32 ビットオブジェクト上および 64 ビットオブジェクト上のリンカーの動作は同じですが、このマニュアルでは 32 ビットオブジェクトでの動作を例として使用します。64 ビットの処理が 32 ビットの処理と異なる場合には説明します。

64 ビットアプリケーションについては、『Solaris 64 ビット 開発ガイド』を参照してください。

環境変数

リンカーでは、LD_ という文字で始まる環境変数を多数サポートしています。各環境変数は、この一般形式、またはこれに _32_64 の接尾辞を追加した形式が可能です。この接尾辞は、環境変数をそれぞれ 32 ビットまたは 64 ビットプロセス固有のものにし、また影響のある一般の、接尾辞の付いていない環境変数のバージョンをオーバライドします。

このマニュアルでは、リンカーの環境変数と記述してある場合は、一般の、接尾辞の付いていない形式を使用するものとします。サポートされているすべての環境変数のリストは、ld(1) または ld.so.1(1) を参照してください。

サポートするツール

上記のオブジェクトとともに、サポートツールとライブラリもいくつか揃っています。これらのツールを使用すると、これらのオブジェクトとリンクプロセスの分析や検査が行えます。これらのツールには、elfdump(1)nm(1)dump(1)ldd(1)pvs(1)elf(3ELF)、およびリンカーデバッギングのサポートライブラリがあります。これらのツールについては、例を用いて詳しく説明します。