静的ライブラリは、通常のオブジェクトファイルの単なる集合体です。 慣習的に、静的ライブラリは ``.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 を参照してください。 -l と -L オプションを使って、リンカ ld(1) を直接使用することもできます。 しかしながら、ld(1) のインターフェースは gcc(1) よりも変更されやすいので、 ほとんどの場合は gcc(1) を使うほうがよいです。