ライブラリとは、インデックスの付いたオブジェクト・ファイルのコレクションです。ライブラリは、リンクされたプログラムで必要な場合にインクルードされます。オブジェクト・ファイルとライブラリを組み合わせることで、ソースを公開せずにコードを簡単に配布することができます。また、より少ないコマンドラインのエントリで、プロジェクトをコンパイルすることができます。
スタティック・ライブラリを使用して生成された実行ファイルは、個々のソースまたはオブジェクト・ファイルから生成された実行ファイルと同じです。スタティック・ライブラリは、ランタイムでは必要ないため、実行ファイルを配布する際に含める必要はありません。一般的に、コンパイル時には個々のソースファイルをリンクするより、スタティック・ライブラリをリンクする方が早く処理することができます。
スタティック・ライブラリをビルドする方法:
-c オプションを使用して、ソースファイルからオブジェクト・ファイルを生成します。
prompt>icpc -c my_source1.cpp my_source2.cpp my_source3.cpp
GNU の ar ツールを使用して、オブジェクト・ファイルからライブラリを作成します。
prompt>ar rc my_lib.a my_source1.o my_source2.o my_source3.o
プロジェクトをコンパイルして、新しく作成したライブラリをリンクします。
prompt>icpc main.cpp my_lib.a
ライブラリ・ファイルとソースファイルが異なるディレクトリにある場合、-Ldir オプションを使用して、ライブラリのディレクトリを指定します。
prompt>icpc -L/cpp/libs main.cpp my_lib.a
プロシージャ間の最適化 (IPO) を使用する場合は、xiar を使用した 「IPO オブジェクトからのライブラリの作成」 を参照してください。
共有ライブラリは、ダイナミック・ライブラリまたはダイナミック共有オブジェクト (DSO) とも呼ばれ、スタティック・ライブラリとは異なる形でリンクされます。ビルドの際、リンカはすべての必要なシンボルを実行ファイルにリンクするか、またはランタイム時に共有ライブラリからリンクされるようにします。共有ライブラリからコンパイルされた実行ファイルのサイズは小さくなりますが、実行ファイルが正常に動作するためには共有ライブラリをインクルードする必要があります。複数のプログラムが同じ共有ライブラリを使用する場合、メモリに必要なのは、1 つのライブラリのコピーのみです。
共有ライブラリをビルドする方法:
-fPIC および -c オプションを使用して、ソースファイルからオブジェクト・ファイルを生成します。
prompt>icpc -fPIC -c my_source1.cpp my_source2.cpp my_source3.cpp
-shared オプションを使用して、オブジェクト・ファイルからライブラリを作成します。
prompt>icpc -shared my_lib.so my_source1.o my_source2.o my_source3.o
プロジェクトをコンパイルして、新しく作成したライブラリをリンクします。
prompt>icpc main.cpp my_lib.so
「インテル® 共有ライブラリ」 および 「非共有ライブラリのコンパイル」 も参照してください。