スタティックライブラリ | Programming Place Plus Visual Studio編

トップページVisual Studio編

この章の概要

この章の概要です。


スタティックライブラリ

スタティックライブラリ (static library) あるいはスタティックリンクライブラリ (static link library) は、関数やクラスなど、プログラムに必要な部品のコードをひとまとめにしたライブラリ (library) の一種です。

ライブラリのほかの形態として、DLL(ダイナミックリンクライブラリ)があります。

スタティックライブラリの拡張子には .lib が用いられます。

ライブラリ自体を実行することはできず、ほかの実行ファイルから、ライブラリ内のコードを呼び出すかたちで使用します。スタティックライブラリの場合、実行ファイルを作る時点で、ライブラリのコードと結合しておく必要があります。この結合処理を、スタティックリンク(static link)(あるいは単にリンク (link))と呼びます。実行ファイルを作るときに結合済みになるため、実行ファイル自体のサイズは大きくなります。

複数のプログラムがそれぞれ同じ .lib をリンクして使用することによって、コードを再利用できます。

スタティックライブラリを作成する

スタティックライブラリを作成するにはまず、そのように設定されたプロジェクトを作成します。詳細は、「プロジェクトを作成する」のページを参照してください。

プロジェクトが作成できたら、C言語や C++ などのプログラミング言語を用いて、いつものようにソースコードを書いてビルドします。ただし、スタティックライブラリ自体は、単体で実行するものではないので、main関数のような開始地点となるコードは書きません。main関数は、スタティックライブラリを使う側のプログラムにあります。

ビルドが成功すると、拡張子が .lib のファイルが生成されます。

スタティックライブラリを作る場合でも、通常の実行ファイルを作る場合でも、1つのソースファイル(.c や .cpp などの拡張子を持つファイル)からは、1つのオブジェクト形式ファイル(.obj などの拡張子を持つファイル)が生成されます。最終的に生成される .lib は、複数作られた .obj を1つにまとめたものと考えればいいです。スタティックライブラリを使う側のプログラムは .lib をリンクすることによって、その中に入っている .obj のコードを使用できます。

スタティックライブラリを使う

スタティックライブラリはほかのプログラムからリンクして使用しますが、その方法は複数あります。

いずれにしても、スタティックライブラリを作るプロジェクトと、スタティックライブラリを使うプロジェクトが別々に存在することになります。

スタティックライブラリと、それを使うプログラムを同時並行で開発するならば、1つのソリューションに、作成側のプロジェクトと使用側のプロジェクトを含める方法も採れます。

プロジェクトのプロパティでリンクの指示を行う

プロジェクトのプロパティ内に、リンクするライブラリを指定する項目があります。画面の開き方は「プロジェクトのプロパティを開く」を参照してください。

  1. 左側のリストから、「構成プロパティ」>「リンカー」>「入力」を選択
  2. 右側の「追加の依存ファイル」を選択。右端のアイコンを選択し、「編集…」を選択
  3. 一番上のリストに .lib の名前を追加して、「OK」を選択
  4. 元のウィンドウに戻るので、再び「OK」を選択
依存ライブラリを追加する
依存ライブラリを追加する

通常、この設定項目では .libファイルの名前だけを記述し、どこにあるファイルなのかは指示しません。Visual Studio は .libファイルを探すときに、ライブラリディレクトリとして設定されている場所から探そうとします。デフォルトのライブラリディレクトリは、プロジェクトのプロパティの以下のところで確認できます。

  1. 左側のリストから、「構成プロパティ」>「VC++ ディレクトリ」を選択
  2. 右側の「ライブラリディレクトリ」を確認

ここに記載されているディレクトリ以外の場所にある .lib を使いたいときは、プロジェクトのプロパティの以下の場所から指定します。

  1. 左側のリストから、「構成プロパティ」>「リンカー」>「全般」を選択
  2. 右側の「追加のライブラリディレクトリ」を選択。右端のアイコンを選択し、「編集…」を選択
  3. 一番上のリストにディレクトリを追加して、「OK」を選択
  4. 元のウィンドウに戻るので、再び「OK」を選択
ライブラリディレクトリを追加する

3番のところでは、右端の「…」ボタンを押して、ディレクトリを選ぶウィンドウを出すと指定しやすいでしょう。

ライブラリディレクトリを追加する

ソースファイル内でリンクの指示を行う

C言語や C++ で使える #pragma(C言語編第29章新C++編「プリプロセス」)を用いて、ソースファイル内に指示を記述する方法です。

次の1文をソースファイル内に記述すると、そのソースファイルから生成される .obj の中に、リンクしなければならないライブラリの情報として書き込まれます。

#pragma comment(lib, "test.lib")

“test.lib” の部分は、実際の .libファイルの名前に合わせて変更してください。

プロジェクトのプロパティでリンクの指示を行う」で説明した方法と同様、.libファイルはライブラリディレクトリから探し出されるので、test.lib がある場所を設定しておく必要があります。あるいは “test.lib” の部分を “mylibs¥¥test.lib” や “C:¥¥mylibs¥¥test.lib” のように、相対パスや絶対パスで指定することもできます。

【上級】生成された .obj の中身を確認すると、“/DEFAULTLIB” という記述に続けて、指定したパスが書き込まれていることが分かります。リンクの過程でリンカがこの情報を読み取って、指示されたライブラリをリンクします。

参考リンク


更新履歴



Visual Studio編のトップページへ

Programming Place Plus のトップページへ



はてなブックマーク に保存 Pocket に保存 Facebook でシェア
X で ポストフォロー LINE で送る noteで書く
rss1.0 取得ボタン RSS 管理者情報 プライバシーポリシー
先頭へ戻る