SSブログ

スタティックライブラリの作成と使用(C++) [開発環境]

msdnより

1. スタティックライブラリ プロジェクトの作成

① [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。

② プロジェクトの種類ペインで、[Visual C++] の [win32] をクリックします。

③ テンプレート ペインの [Win32 コンソール アプリケーション] をクリックします。

④ プロジェクトとして「MathFuncsLib」などの名前を付け、[プロジェクト名] フィールドに入力します。ソリューションとして「StaticLibrary」などの名前を付け、[ソリューション名] フィールドに入力します。

image

⑤ [OK] をクリックして、Win32 アプリケーション ウィザードを起動します。[Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。

image

⑥ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[アプリケーションの種類] の [スタティック ライブラリ] を選択します。

⑦ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[追加のオプション] の下にある [プリコンパイル済みヘッダー] の選択を解除します。

image

⑧ [完了] をクリックして、プロジェクトを作成します。

 

2. クラスを追加する。

① 新しいクラスのヘッダー ファイルを作成するには、[プロジェクト] メニューの [新しい項目の追加] をクリックします。[新しい項目の追加] ダイアログ ボックスが表示されます。カテゴリ ペインで、[Visual C++] の [コード] をクリックします。テンプレート ペインの [ヘッダー ファイル (.h)] をクリックします。ヘッダー ファイルとして「MathFuncsLib.h」などの名前を付け、[追加] をクリックします。空白のファイルが表示されます。

image

② 加算、減算、乗算、除算などの一般的な数値演算を行うための、MyMathFuncs という名前の単純なクラスを追加します。コードは次のようになります。

// MathFuncsLib.h

namespace MathFuncs
{
class MyMathFuncs
{
public:
// Returns a + b
static double Add(double a, double b);

// Returns a - b
static double Subtract(double a, double b);

// Returns a * b
static double Multiply(double a, double b);

// Returns a / b
// Throws DivideByZeroException if b is 0
static double Divide(double a, double b);
};
}


③ 新しいクラスのソース ファイルを作成するには、[プロジェクト] メニューの [新しい項目の追加] をクリックします。[新しい項目の追加] ダイアログ ボックスが表示されます。カテゴリ ペインで、[Visual C++] の [コード] をクリックします。テンプレート ペインの [C++ ファイル (.cpp)] をクリックします。ソース ファイルとして「MathFuncsLib.cpp」などの名前を付け、[追加] をクリックします。空白のファイルが表示されます。



image



④ ソース ファイルに MyMathFuncs の機能を実装します。コードは次のようになります。



// MathFuncsLib.cpp
// compile with: /c /EHsc
// post-build command: lib MathFuncsLib.obj

#include "MathFuncsLib.h"

#include <stdexcept>

using namespace std;

namespace MathFuncs
{
double MyMathFuncs::Add(double a, double b)
{
return a + b;
}

double MyMathFuncs::Subtract(double a, double b)
{
return a - b;
}

double MyMathFuncs::Multiply(double a, double b)
{
return a * b;
}

double MyMathFuncs::Divide(double a, double b)
{
if (b == 0)
{
throw new invalid_argument("b cannot be zero!");
}

return a / b;
}
}


⑤ プロジェクトをスタティック ライブラリにビルドするには、[プロジェクト] メニューの MathFuncsLib Properties… をクリックします。左ペインで、[構成プロパティ] の下の [全般] をクリックします。右ペインで、[構成の種類] を [スタティック ライブラリ (.lib)] に変更します。[OK] をクリックして、変更を保存します。



image



⑥ [ビルド] メニューの [ソリューションのビルド] をクリックし、スタティック ライブラリをコンパイルします。これにより、他のプログラムで使用できるスタティック ライブラリが作成されます。



3. このスタティックライブラリを参照するアプリケーションを作成する



① 作成したスタティック ライブラリを参照して使用するアプリケーションを作成するには、[ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。



② プロジェクトの種類ペインで、[Visual C++] の [win32] をクリックします。



③ テンプレート ペインの [Win32 コンソール アプリケーション] をクリックします。



④ プロジェクトとして「MyExecRefsLib」などの名前を付け、[プロジェクト名] フィールドに入力します。[ソリューション] の横のドロップダウン リストで、[ソリューションに追加] をクリックします。これにより、スタティック ライブラリと同じソリューションに新しいプロジェクトが追加されます。



image



⑤ [OK] をクリックして、Win32 アプリケーション ウィザードを起動します。[Win32 アプリケーション ウィザード] ダイアログ ボックスの [概要] ページで、[次へ] をクリックします。



⑥ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[アプリケーションの種類] の [コンソール アプリケーション] を選択します。



⑦ Win32 アプリケーション ウィザードの [アプリケーションの設定] ページで、[追加のオプション] の下にある [プリコンパイル済みヘッダー] の選択を解除します。



image image



⑧ [完了] をクリックして、プロジェクトを作成します。



4. アプリケーションからスタティックライブラリのを使用するには



① 新しいコンソール アプリケーションを作成すると、空のプログラムが作成されます。ソース ファイルの名前は、前の処理でプロジェクトに付けた名前と同じになります。この例では、「MyExecRefsLib.cpp」という名前です。



② スタティック ライブラリで作成された数値演算ルーチンを使用するには、それを参照する必要があります。このためには、[プロジェクト] メニューの [参照] をクリックします。[プロパティ ページ] ダイアログ ボックスで、[共通プロパティ] ノードを展開し、[参照設定] をクリックします。次に、[新しい参照の追加] ボタンをクリックします。[参照] ダイアログ ボックスの詳細については、「[参照設定] ([<プロジェクト名> プロパティ ページ] ダイアログ ボックス - [共通プロパティ])」を参照してください。



image



③ [参照の追加] ダイアログ ボックスが表示されます。このダイアログ ボックスには、参照できるすべてのライブラリが表示されます。[プロジェクト] タブでは、現在のソリューション内のすべてのプロジェクト、およびそれらに含まれるすべてのライブラリが表示されます。[プロジェクト] タブで、MathFuncsLib をクリックします。次に [OK] をクリックします。[参照の追加] ダイアログ ボックスの詳細については、「[参照の追加] ダイアログ ボックス」を参照してください。



image



④ スタティック ライブラリのヘッダー ファイルを参照するには、インクルード ディレクトリ パスを変更する必要があります。このためには、[プロパティ ページ] ダイアログ ボックスで、[構成プロパティ] ノードを展開し、次に [C/C++] ノードを展開して、[全般] をクリックします。[追加のインクルード ディレクトリ] の横に、MathFuncsLib.h ヘッダー ファイルへのパスを入力します。



image



⑤ これで、MyMathFuncs クラスをこのアプリケーションで使用できます。MyExecRefsLib.cpp の内容を次のコードに置き換えます。



// MyExecRefsLib.cpp
// compile with: /EHsc /link MathFuncsLib.lib

#include <iostream>

#include "MathFuncsLib.h"

using namespace std;

int main()
{
double a = 7.4;
int b = 99;

cout << "a + b = " <<
MathFuncs::MyMathFuncs::Add(a, b) << endl;
cout << "a - b = " <<
MathFuncs::MyMathFuncs::Subtract(a, b) << endl;
cout << "a * b = " <<
MathFuncs::MyMathFuncs::Multiply(a, b) << endl;
cout << "a / b = " <<
MathFuncs::MyMathFuncs::Divide(a, b) << endl;

return 0;
}


5. アプリケーションの実行



MyExecRefsLib が既定のプロジェクトとして選択されていることを確認します。ソリューション エクスプローラで [MyExecRefsLib] を選択し、次に [プロジェクト] メニューの [スタートアップ プロジェクトに設定] を選択します。



image



② プロジェクトを実行するには、[デバッグ] メニューの [デバッグなしで開始] を選択します。出力は、次のようになります。



image


ライブラリの基礎 [開発環境]

Linux ライブラリの3類

スタティックライブラリは、コンパイル時にコードがプログラムに組込まれます。 モジュールサイズが大きくなりますが、別のマシンにバイナリで配布したときに そのライブラリがなくても動作します。 .a で終わるファイルです。


共有ライブラリは、プログラムの実行時にロードされます。マシンによっては、 その共有ライブラリがなかったり、バージョンが違ったりして、動作しないことがあります。 .so と .sa で終わるファイルです。.sa は、古い a.out 形式で使われた共有ライブラリです。


ダイナミックライブラリは、共有ライブラリの1種です。実行時に 関数を使って ロードしたり、アンロードしたりできます。

ライブラリ化の勧め

殆ど変更しなくなってきたクラスについては「ライブラリ化」をしてすっきり整理することをお勧めします。

ライブラリの基本については、以下が参考になります。

http://marupeke296.com/DXCLS_MakeStaticLib.html

http://www.glamenv-septzen.net/nifty/others/computer/linux_ldd01.html

ライブラリの作成方法については、以下が参考になります。

http://msdn.microsoft.com/ja-jp/library/ms235627(v=vs.90).aspx

http://www.ncad.co.jp/~komata/c-kouza26.htm

http://www.geocities.jp/ky_webid/win32c/056.html


この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。