1. はじめに

プログラマのためのこの HOWTO は、GNU ツールセットを使用している Linux 上でプログラムライブラリを作成、使用する方法を論じます。 ``プログラムライブラリ'' とは、単に、 あとでプログラムに組み込まれることになるコンパイル済みのコード (及びデータ) を含むファイルのことです。プログラムライブラリは、 プログラムを、よりモジュール化し、より速く再コンパイルでき、 より簡単に更新できるものにします。プログラムライブラリは、 三つのタイプ――静的ライブラリ、共有ライブラリ、動的にロードされる (dynamically loaded; DL) ライブラリ――に分類することができます。

この文書は、最初に、静的ライブラリ ――プログラムが実行される前にその実行可能プログラムに組み込まれるライブラリ―― について論じます。それから、共有ライブラリ ――プログラム実行時にロードされ、かつ複数のプログラム間で共有されるライブラリ―― について論じます。最後に、動的にロードされる (dynamically loaded; DL) ライブラリ ――プログラム実行中の任意の時点でロードして使用することが可能なライブラリ―― について論じます。 DL ライブラリは、実際には異なるライブラリ形式というわけではありません (静的ライブラリも共有ライブラリも DL ライブラリとして使用することが可能です)。 その代わりに、プログラマが DL ライブラリをどのように使用するか という点において、違いがあります。HOWTO は、さらに多くの例を挙げている章、 その他の情報源への参照を挙げている章、をもって終了します。

この HOWTO は実行可能ファイルとライブラリのための Executable and Linking Format (ELF) 形式 ――昨今のほとんど全ての Linux ディストリビューションで使用されている形式―― についてのみ論じます。 GNU gcc ツールセットは、実際には ELF 以外のライブラリ形式を扱うことができます。 特に、ほとんどの Linux ディストリビューションでは、旧式の a.out 形式を今なお使用することが可能です。 しかしながら、これらの形式はこの文書の対象外です。

共有ライブラリを指して dynamically linked libraries (DLL) という用語を使う人がいること、その DLL という用語を DL ライブラリとして使用される任意のライブラリを意味するために使う人がいること、 また、どちらかの条件を満たすライブラリを意味するために DLL という用語を使う人がいること、には注意したほうがよいです。 いずれの意味を取り上げるにしても、この HOWTO は Linux 上でのこれら全ての DLL についてカバーします。

多くのシステムに移植されるアプリケーションを作成しているならば、 ライブラリを構築しインストールするのに、Linux ツールを直接使用する代わりに GNU libtool を使用することを考慮したほうがよいかもしれません。GNU libtool は、 共有ライブラリ使用の複雑さ (例えば、それらを作成しインストールするなど) を一貫性のあるポータブルなインターフェースで隠す、 汎用的なライブラリサポートスクリプトです。Linux 上では、GNU libtool はこの HOWTO に記述されているツールと慣習の上に構築されています。 動的にロードされるライブラリへのポータブルなインターフェース用に、 様々なポータビリティラッパーを使用することができます。GNU libtool は、 ``libltdl'' と呼ばれるその種のラッパーを含んでいます。 他の選択肢としては、可搬性のある方法で動的ローディングをサポートする glib ライブラリ (glibc と混同しないでください) を使用することもできます。glib については、 http://developer.gnome.org/doc/API/glib/glib-dynamic-loading-of-modules.html でさらに知ることができます。再度述べますが、Linux 上では、この機能は、 この HOWTO 内に記述されている構成物を使用することによって実装されています。 もしもあなたが実際に Linux 上でコードを開発、もしくはデバッグしているならば、 おそらくなおさらのこと、この HOWTO 内の情報を欲されることでしょう。

この HOWTO の一次配布場所は http://www.dwheeler.com/program-library であり、Linux Documentation Project (http://www.linuxdoc.org) に寄贈されています。著作権は David A. Wheeler にあり (Copyright (C) 2000)、 General Public License (GPL) でライセンスされています。 さらなる情報については最後の章を読んでください。