スタティックライブラリ

前々回は、UNIX系OSにおけるスタティックライブラリの作成を行った・・・。
今回は、Windowsにおけるスタティックライブラリの作成を行い、それを使ってみる・・・。

まず、

f:id:BG1:20151030112314p:plain

Win32プロジェクトでStaticLibraryプロジェクトを作る・・・。

f:id:BG1:20151030112452p:plain

Windowsアプリケーション、空のプロジェクトで・・・。

出来たプロジェクトにStaticLibrary_1.hを追加し、

と記述・・・。
StaticLibrary_1.cppも追加し、

を記述・・・。
StaticLibraryFunc_1という関数を呼ぶと"StaticLibraryFunc_1!"が出力される・・・。

続いて、StaticLibrary_2.hを追加し、

を記述・・・。
StaticLibrary_2.cppを追加し、

を記述・・・。
StaticLibraryFunc_2という関数なら"StaticLibraryFunc_2!"が出力される・・・。

さて、これでソースは追加し終わったが、

f:id:BG1:20151030113811p:plain

プロパティの[全般]で[構成の種類]を"アプリケーション(.exe)"から、

f:id:BG1:20151030113625p:plain

"スタティックライブラリ(.lib)"に変更する・・・。

f:id:BG1:20151030114022p:plain

そうすると、出力するライブラリファイルの拡張子が".lib"になる・・・。(UNIX系OSだと".a"が一般的だが、Windowsは".lib")
これでビルドすると、

f:id:BG1:20151030114402p:plain

Debug構成ならdebugフォルダ(Release構成ならreleaseフォルダ)の下に、"StaticLibrary.lib"ができる・・・。

さて、これを呼び出すMainプロジェクトを追加する・・・。

f:id:BG1:20151030115115p:plain

ソリューションを右クリックで[追加]-[新しいプロジェクト]

f:id:BG1:20151030115334p:plain

コンソールアプリケーションの"Main"プロジェクトを追加・・・。

f:id:BG1:20151030115613p:plain

これも空のプロジェクトで・・・。

Main.cppを追加して、

を記述・・・。
StaticLibraryFunc_1とStaticLibraryFunc_2を順に呼び出すだけ・・・。

これでMainプロジェクトもソースコードの追加は終わり・・・。

でMainプロジェクトの設定方法だが・・・。

f:id:BG1:20151030120028p:plain

[プロジェクト依存関係]を選択し、

f:id:BG1:20151030120109p:plain

Mainになってる状態でStaticLibraryにチェックを入れる・・・。
これでMainプロジェクトはStaticLibraryに依存してる状態なので、

f:id:BG1:20151030120214p:plain

StaticLibraryからビルドを始める・・・。

そして、

f:id:BG1:20151030120514p:plain

[C/C++]の[追加のインクルードディレクトリ]に"../StaticLibrary"をセット・・・。
StaticLibraryプロジェクトのヘッダファイルは、Mainプロジェクトからみるとそこにあるので・・・。

そして、

f:id:BG1:20151030121003p:plain

Mainプロジェクトをスタートアッププロジェクトに設定する・・・。

f:id:BG1:20151030121426p:plain

こうすると、Mainプロジェクトのほうが太字になる・・・。

こうしないとMainプロジェクトから実行が始まらないので・・・。

これでビルドの準備が整った・・・。

ちなみに、StaticLibrary.libがdebugフォルダなどに既にある場合は、
[プロジェクト依存関係]をチェックしなくても、

f:id:BG1:20151030122036p:plain

[リンカ]-[全般]で[追加のライブラリディレクトリ]のパス(この場合StaticLibrary.libがdebugフォルダにあるので)を指定して、

f:id:BG1:20151030122336p:plain

[リンカ]-[入力]で[追加の依存ファイル]にStaticLibrary.libを指定すればいい・・・。

これでビルドして、実行すると、

StaticLibraryFunc_1!
StaticLibraryFunc_2!
続行するには何かキーを押してください . . .

StaticLibrary.libの関数を呼ぶことができた・・・。

Sample/Main.cpp at master · bg1bgst333/Sample · GitHub
Sample/StaticLibrary_1.h at master · bg1bgst333/Sample · GitHub
Sample/StaticLibrary_1.cpp at master · bg1bgst333/Sample · GitHub
Sample/StaticLibrary_2.h at master · bg1bgst333/Sample · GitHub
Sample/StaticLibrary_2.cpp at master · bg1bgst333/Sample · GitHub