2. 静的ライブラリ

静的ライブラリは、通常のオブジェクトファイルの単なる集合体です。 慣習として、静的ライブラリは「.a」という拡張子を持ちます。 この集合体は、ar (archiver) プログラムを使用して作成されます。 静的ライブラリは以前ほどには使われなくなっていますが、これは、共有ライブラリのほうが優れているためです (あとで説明します)。それでもまだ、静的ライブラリは折に触れて作成され (はじめは歴史的な理由で存在していました)、また、説明するのも簡単です。

ユーザは、コードを再コンパイルする必要なく静的ライブラリをプログラムにリンクすることができるので、再コンパイルにかかる時間を節約できます。 ただ、昨今の高速なコンパイラのことを考えると、再コンパイル時間は重要ではなくなってきているので、この理由付けは以前ほど有力ではありません。 静的ライブラリは、その開発者が、ライブラリをリンクすることをプログラマに許可はしたいがライブラリのソースコードは渡したくはない、という場合にしばしば役に立ちます (これはライブラリベンダにとっては好都合ですが、そのライブラリを使おうとしているプログラマにとっては、どう考えても好都合とは言えません)。 論理的には、実行可能ファイルにリンクされる静的 ELF ライブラリ内のコードは若干速く (1 〜 5%) 動作するはずですが、実際には、他のごちゃごちゃした要因のため、その通りになることは稀のようです。

静的ライブラリを作成する、もしくは既に存在する静的ライブラリにさらにオブジェクトファイルを追加するためには、次のようなコマンドを使用してください。

  ar rcs my_library.a file1.o file2.o

このコマンド例では、静的ライブラリ my_library.a にオブジェクトファイル file1.o と file2.o を追加しています。まだ my_library.a が存在していなければ、作成します。 静的ライブラリ作成に関する詳細な情報については ar(1) を参照してください。

静的ライブラリを作成したら、それを使いたくなることでしょう。 実行可能プログラムを作成するときにコンパイルとリンク処理の一部として取り込むことで、静的ライブラリを使用できます。 実行可能ファイルを作成するときに gcc(1) を使っているならば、ライブラリを指定するのに -l オプションを使用できます。 より詳しい情報については info:gcc を参照してください。

gcc を使うときにはパラメータの順番に気をつけてください。-l オプションはリンカオプションなので、コンパイルするファイル名の「後に」置く必要があります。 これは、通常のオプション構文とはだいぶ異なります。-l オプションをファイル名の前に置いた場合、リンクは完全に失敗し、不可解なエラーになってしまうでしょう。

-l と -L オプションを使ってリンカ ld(1) を直接使用することもできます。 しかしながら、ld(1) のインターフェースは gcc(1) よりも変更されやすいので、ほとんどの場合は gcc(1) を使うほうがよいです。