リンカーとライブラリ

関連情報

動的リンク

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

標準ライブラリのサービスからアプリケーションを切り離すことにより、動的リンクも、アプリケーションの移植性および拡張性を向上させることができます。サービスのインタフェースと実装が独立しているため、アプリケーションの安定性を維持しながら、システムを更新することができます。動的リンクは、ABI (アプリケーションバイナリインタフェース) を利用するときに必要で、Solaris アプリケーションに適したコンパイル方式です。

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

システムコンポーネントとアプリケーションコンポーネントの間に定義されたバイナリインタフェースを利用すれば、これらのコンポーネントを非同期的に更新することができます。 Solaris リンカーは、これらのインタフェース上で稼動し、実行できるようにアプリケーションを組み合わせます。Solaris リンカーによって処理されたコンポーネントにはすべて、バイナリインタフェースが連結されますが、Solaris システムが提供するバイナリインタフェースは、「Solaris ABI」と呼ばれます。

Solaris ABI の技術は、「System V アプリケーションバイナリインタフェース」によって提唱された ABI に準拠しています。さらに、SPARCTM International が SPARC プロセッサ向けに作成した「SPARC® Compliance Definition (SCD)」にも準拠しています。

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

リンカーは 32 ビットのオブジェクト上で動作し、SPARCV9 システム上では 64 ビットのオブジェクト上でも動作します。SPARC システムでは、64 ビットリンカー (ld(1)) は 32 ビットのオブジェクトを生成でき、32 ビットリンカーは 64 ビットのオブジェクトを生成できます。32 ビットのリンカーでは 64 ビットオブジェクトのサイズは、.bss を除いて、2G バイトに制限されます。

32 ビットおよび 64 ビットのリンク編集を行うときに、コマンド行オプションの違いはありません。リンカーの操作モードは、コマンド行に最初に指定した入力再配置可能オブジェクトファイルの、ELF クラスによって制御されます。mapfile やアーカイブライブラリのみからのリンクなどの、特別なリンク編集では、それらの入力ファイルの影響を受けず、デフォルトで 32 ビットモードになります。これらのケースでは、-64 オプションで 64 ビットのリンク編集を行うことができます。32 ビットオブジェクトと 64 ビットオブジェクトを混在させることはできません。

32 ビットオブジェクト上および 64 ビットオブジェクト上のリンカーの操作に違いはありません。このマニュアルでは、多くの場合、32 ビットオブジェクトでの操作の例を使用します。64 ビットの処理が 32 ビットの処理と異なる場合には説明します。

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

環境変数

リンカーは、LD_ で始まる環境変数 (LD_LIBRARY_PATH など) を多数サポートします。 これらの環境変数は、この汎用形式でも使用できますが、_32 または _64 を接尾辞として指定することもできます (LD_LIBRARY_PATH_64 など)。 この接尾辞は、環境変数をそれぞれ 32 ビットまたは 64 ビットプロセス固有のものにします。またこの接尾辞は、接尾辞の付いていない汎用形式の環境変数に優先します。

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

サポートするツール

Solaris オペレーティング環境では、いくつかのサポートツールとライブラリも提供しています。これらのツールを使用すると、これらのオブジェクトとリンク処理の分析や検査が行えます。このようなツールとして、elfdump(1)nm(1)dump(1)ldd(1)pvs(1)elf(3ELF) と、リンカーデバッグのサポートライブラリがあります。これらのツールについては、例を使用して詳しく説明します。