16.3. GCC でのライブラリーの使用
ライブラリーは、プログラムで再利用可能なコードのパッケージです。C または C++ のライブラリーは、以下の 2 つの部分で設定されます。
- ライブラリーコード
- ヘッダーファイル
ライブラリーを使用するコードのコンパイル
ヘッダーファイルには、ライブラリーのインターフェイスが記述されています。ライブラリーで使用できる関数と変数。コードをコンパイルする場合に、ヘッダーファイルの情報が必要です。
通常、ライブラリーのヘッダーファイルは、アプリケーションのコードとは別のディレクトリーに配置されます。ヘッダーファイルの場所を GCC に指示するには、-I
オプションを使用します。
$ gcc ... -Iinclude_path ...
include_path は、ヘッダーファイルのディレクトリーのパスに置き換えます。
-I
オプションは、複数回使用して、ヘッダーファイルを含むディレクトリーを複数追加できます。ヘッダーファイルを検索する場合は、-I
オプションで表示順に、これらのディレクトリーが検索されます。
ライブラリーを使用するコードのリンク
実行可能ファイルをリンクする場合には、アプリケーションのオブジェクトコードとライブラリーのバイナリーコードの両方が利用できる状態でなければなりません。静的ライブラリーおよび動的ライブラリーのコードは、形式が異なります。
-
静的なライブラリーは、アーカイブファイルとして利用できます。静的なライブラリーには、一連のオブジェクトファイルが含まれます。アーカイブファイルのファイル名の拡張子は
.a
になります。 -
動的なライブラリーは共有オブジェクトとして利用できます。実行可能ファイルの形式です。共有オブジェクトのファイル名の拡張子は
.so
になります。
ライブラリーのアーカイブファイルまたは共有オブジェクトファイルの場所を GCC に渡すには、-L
オプションを使用します。
$ gcc ... -Llibrary_path -lfoo ...
library_path は、ライブラリーのディレクトリーのパスに置き換えます。
-I
オプションは複数回使用して、ディレクトリーを複数追加できます。ライブラリーを検索する場合は、-L
オプションで表示順に、このディレクトリーが検索されます。
オプションの順序は重要です。GCC は、このライブラリーのディレクトリーを認識していない限り、ライブラリー foo に対してリンクできません。そのため、-L
オプションを使用して先にライブラリーディレクトリーを指定してから、-l
オプションでライブラリーをリンクするようにしてください。
ライブラリーを使用するコードを 1 つの手順でコンパイルし、リンクする方法
1 つの gcc
コマンドでコードをコンパイルおよびリンクできる場合は、上記の場合にこれらのオプションを一度に使用します。
関連資料
- GNU コンパイラーコレクション (GCC) の使用: 3.16 Options for Directory Search
- GNU コンパイラーコレクション (GCC) の使用: 3.15 Options for Linking