この章の概要です。
スタティックライブラリ (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つのソリューションに、作成側のプロジェクトと使用側のプロジェクトを含める方法も採れます。
プロジェクトのプロパティ内に、リンクするライブラリを指定する項目があります。画面の開き方は「プロジェクトのプロパティを開く」を参照してください。
通常、この設定項目では .libファイルの名前だけを記述し、どこにあるファイルなのかは指示しません。Visual Studio は .libファイルを探すときに、ライブラリディレクトリとして設定されている場所から探そうとします。デフォルトのライブラリディレクトリは、プロジェクトのプロパティの以下のところで確認できます。
ここに記載されているディレクトリ以外の場所にある .lib を使いたいときは、プロジェクトのプロパティの以下の場所から指定します。
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” という記述に続けて、指定したパスが書き込まれていることが分かります。リンクの過程でリンカがこの情報を読み取って、指示されたライブラリをリンクします。
Programming Place Plus のトップページへ
はてなブックマーク に保存 | Pocket に保存 | Facebook でシェア |
X で ポスト/フォロー | LINE で送る | noteで書く |
RSS | 管理者情報 | プライバシーポリシー |