このチュートリアルでは、C++ アプリケーションに使用するスタティック ライブラリ (.lib ファイル) を作成する方法について説明します。 スタティック ライブラリを使用すると、コードを有効に再利用できます。 機能を必要とするすべてのアプリで同じルーチンを再実装するのではなく、静的ライブラリに 1 回書き込んでからアプリから参照します。 静的ライブラリからリンクされたコードは、アプリの一部になります。 コードを使用するために別のファイルをインストールする必要はありません。
このチュートリアルでは、次の作業について説明します。
前提条件
C++ 言語の基本の理解。
スタティック ライブラリ プロジェクトを作成する
プロジェクトを作成する手順は、お使いの Visual Studio のバージョンによって異なります。 優先するバージョンの Visual Studio のドキュメントを表示するには、 [バージョン] セレクター コントロールを使用します。 このページの目次の一番上にあります。
Visual Studioでスタティック ライブラリ プロジェクトを作成するには:
メニュー バーの [ファイル>新規作成>Projectを選択して、[新しいprojectの作成] ダイアログを開きます。
ダイアログの上部で、[言語] を [C++] に、[プラットフォーム] を [Windows] に、[プロジェクト タイプ] を [ライブラリ] に設定します。
フィルター処理されたプロジェクトの種類の一覧から、デスクトップ ウィザードWindows選択し、[次へ] を選択します。
[新しいプロジェクトの構成] ページで、[プロジェクト名] ボックスに「MathLibrary」と入力して、プロジェクトの名前を指定します。 [ソリューション名] ボックスに「StaticMath」と入力します。 [作成] ボタンを選択して、[Windows デスクトップ プロジェクト] ダイアログを開きます。
[Windows デスクトップ プロジェクト] ダイアログの [アプリケーションの種類] の下で、[スタティック ライブラリ (.lib)] を選択します。
[ 追加オプション] で、[ プリコンパイル済みヘッダー ] チェック ボックスがオンの場合はオフにします。 [ 空のプロジェクト] を選択します。
[OK] を選択して、プロジェクトを作成します。
Visual Studio 2017 でスタティック ライブラリ プロジェクトを作成するには:
メニュー バーで、 [ファイル]>[新規作成]>[プロジェクト] を選択します。
[新しいProject] ダイアログで、[インストール済み>Visual C++>Windows Desktop] を選択します。 中央のウィンドウで、[Windows デスクトップ ウィザード] を選択します。
[名前] ボックスに、 MathLibrary などのプロジェクトの 名前を指定 します。 [ソリューション名] ボックスに、ソリューションの名前 ( StaticMath など) を 指定します。 OK を選択します。
[Windows デスクトップ プロジェクト] ダイアログの [アプリケーションの種類] の下で、[スタティック ライブラリ (.lib)] を選択します。
[ 追加オプション] で、[ プリコンパイル済みヘッダー ] チェック ボックスがオンの場合はオフにします。 [ 空のプロジェクト] を選択します。
[OK] を選択して、プロジェクトを作成します。
Visual Studio 2015 でスタティック ライブラリ プロジェクトを作成するには:
メニュー バーで、 [ファイル]>[新規作成]>[プロジェクト] を選択します。
[新しいProject] ダイアログで、[インストール済み>Templates>Visual C++>Win32] を選択します。 中央のウィンドウで [Win32 コンソール アプリケーション]をクリックします。
[名前] ボックスに、 MathLibrary などのプロジェクトの 名前を指定 します。 [ソリューション名] ボックスに、ソリューションの名前 ( StaticMath など) を 指定します。 OK を選択します。
[Win32 アプリケーション ウィザード] で、[次へ] を選択します。
[アプリケーションの設定] ページの [アプリケーションの種類] で、[スタティック ライブラリ] を選択します。 [ 追加オプション] で、[ プリコンパイル済みヘッダー ] チェック ボックスをオフにします。 [完了] を選択して、プロジェクトを作成します。
スタティック ライブラリにクラスを追加する
スタティック ライブラリにクラスを追加するには:
新しいクラスのヘッダー ファイルを作成します。 ソリューション エクスプローラーで、MathLibrary を右クリックして、プロジェクトのコンテキスト メニューを開きます。 [追加]>[新しい項目] の順に選択します。
[ 新しい項目の追加] ダイアログで、 Visual C++>Code を選択します。 中央のウィンドウで、 [ヘッダー ファイル (.h)]をクリックします。 MathLibrary.h などのヘッダー ファイルの名前を指定し、[追加] を選択します。 ほとんど空白のヘッダー ファイルが表示されます。
加算、減算、乗算、除算などの一般的な数値演算を行うための、
Arithmeticという名前のクラスの宣言を追加します。 コードは次のようになります。// MathLibrary.h #pragma once namespace MathLibrary { class Arithmetic { 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 static double Divide(double a, double b); }; }新しいクラスのソース ファイルを作成するには、ソリューション エクスプローラーで MathLibrary プロジェクトのコンテキスト メニューを開き、[追加>新しい項目] を選択します。
[ 新しい項目の追加 ] ダイアログの中央のウィンドウで、[ C++ ファイル ] (.cpp) を選択します。 MathLibrary.cpp など、ソース ファイルの名前を指定します。 その後、追加を選択します。 空白のソース ファイルが表示されます。
このソース ファイルを使って、
Arithmeticクラスの機能を実装します。 コードは次のようになります。// MathLibrary.cpp // compile with: cl /c /EHsc MathLibrary.cpp // post-build command: lib MathLibrary.obj #include "MathLibrary.h" namespace MathLibrary { double Arithmetic::Add(double a, double b) { return a + b; } double Arithmetic::Subtract(double a, double b) { return a - b; } double Arithmetic::Multiply(double a, double b) { return a * b; } double Arithmetic::Divide(double a, double b) { return a / b; } }スタティック ライブラリをビルドするには、メニュー バーで [ビルド]>[ソリューションのビルド] の順に選択します。 ビルドにより、他のプログラムで使用できる静的ライブラリ MathLibrary.lib が作成されます。
注
プログラムを Visual Studio のコマンド ラインからビルドする場合、2 つの処理によってビルドする必要があります。
-
cl /c /EHsc MathLibrary.cppを実行してコードをコンパイルし、MathLibrary.objという名前のオブジェクト ファイルを作成します。clコマンドはコンパイラ、Cl.exeを呼び出し、/cオプションはリンクせずにコンパイルを指定します。 詳細については、「 /c (リンクせずにコンパイルする)」を参照してください。 -
lib MathLibrary.objを実行してコードをリンクし、スタティック ライブラリ MathLibrary.lib を作成します。libコマンドを実行すると、ライブラリ マネージャー Lib.exeが呼び出されます。 詳細については、 LIB リファレンスを参照してください。
-
スタティック ライブラリを参照する C++ コンソール アプリを作成する
Visual Studioでスタティック ライブラリを参照する C++ コンソール アプリを作成するには:
ソリューション エクスプローラーで、最上位ノードのソリューション 'StaticMath' を右クリックしてコンテキスト メニューを開きます。 [追加]、> の順に選択して、[新しいプロジェクトの追加] ダイアログを開きます。
ダイアログの上部で、[プロジェクト タイプ] フィルターを [コンソール] に設定します。
フィルター処理されたプロジェクト タイプの一覧から、 [コンソール アプリ] を選択して、 [次へ] を選択します。 次のページで、プロジェクトの名前として MathClient を入力します。
[ 作成] を選択してクライアント プロジェクトを作成します。
コンソール アプリケーションを作成すると、空のプログラムが作成されます。 ソース ファイルの名前は、前の処理で付けた名前と同じになります。 この例では、それには
MathClient.cppという名前が付いています。
Visual Studio 2017 で静的ライブラリを参照する C++ コンソール アプリを作成するには:
ソリューション エクスプローラーで、最上位ノードのソリューション 'StaticMath' を右クリックしてコンテキスト メニューを開きます。 [追加]、> の順に選択して、[新しいプロジェクトの追加] ダイアログを開きます。
[新しいProjectの追加] ダイアログで、[インストール済み>Visual C++>Windows Desktop] を選択します。 中央のウィンドウで、[Windows デスクトップ ウィザード] を選択します。
[名前] ボックスに、プロジェクトの名前 (たとえば「MathClient」) を入力します。 [OK] を選択します。
[Windows デスクトップ プロジェクト] ダイアログの [アプリケーションの種類] の下で、[コンソール アプリケーション (.exe)] を選択します。
[ 追加オプション] で、[ プリコンパイル済みヘッダー ] チェック ボックスがオンの場合はオフにします。
[OK] を選択して、プロジェクトを作成します。
コンソール アプリケーションを作成すると、空のプログラムが作成されます。 ソース ファイルの名前は、前の処理で付けた名前と同じになります。 この例では、それには
MathClient.cppという名前が付いています。
Visual Studio 2015 でスタティック ライブラリを参照する C++ コンソール アプリを作成するには:
ソリューション エクスプローラーで、最上位ノードのソリューション 'StaticMath' を右クリックしてコンテキスト メニューを開きます。 [追加]、> の順に選択して、[新しいプロジェクトの追加] ダイアログを開きます。
[新しいProjectの追加] ダイアログで、[インストール済み>Visual C++>Win32] を選択します。 中央のウィンドウで [Win32 コンソール アプリケーション]をクリックします。
[名前] ボックスに、プロジェクトの名前 (たとえば「MathClient」) を入力します。 [OK] を選択します。
[Win32 アプリケーション ウィザード] ダイアログで、[次へ] を選択します。
[アプリケーションの設定] ページの [アプリケーションの種類]で、[コンソール アプリケーション] が選択されていることを確認します。 [追加オプション] で、[プリコンパイル済みヘッダー] をオフにし、[空のProject] を選択します。 [完了] を選択して、プロジェクトを作成します。
空のプロジェクトにソース ファイルを追加するには、右クリックしてソリューション エクスプローラーで MathClient プロジェクトのコンテキスト メニューを開き、[追加>新しい項目] を選択します。
[ 新しい項目の追加] ダイアログで、 Visual C++>Code を選択します。 中央のウィンドウで、 [C++ ファイル (.cpp)]をクリックします。 このソース ファイルの名前 (たとえば「MathClient.cpp」) を指定して、[追加] ボタンを選択します。 空白のソース ファイルが表示されます。
アプリ内でスタティック ライブラリの機能を使用する
アプリでスタティック ライブラリの機能を使用するには:
その中で数学ルーチンを使用する前に、スタティック ライブラリを参照してください。 ソリューション エクスプローラーで MathClient プロジェクトのコンテキスト メニューを開き、[追加>参照] を選択します。
[ 参照の追加] ダイアログには、参照できるライブラリが一覧表示されます。 [プロジェクト] タブでは、現在のソリューション内のプロジェクトと、それらによって参照されるすべてのライブラリが一覧表示されます。 [ プロジェクト ] タブを開き、[ MathLibrary] を選択し、[ OK] を選択します。
含まれているディレクトリ パスを変更して、
MathLibrary.hヘッダー ファイルを参照します。 ソリューション エクスプローラーで MathClient を右クリックし、コンテキスト メニューを開きます。 [ プロパティ] を選択して、[ MathClient プロパティ ページ ] ダイアログを開きます。[ MathClient プロパティ ページ ] ダイアログで、[ 構成 ] の値を [すべての構成] に設定します。 [プラットフォーム] を [すべてのプラットフォーム] に設定します。
[構成プロパティ]>[C/C++]>[全般] プロパティ ページを選択します。 [追加のインクルード ディレクトリ] プロパティで、MathLibrary ディレクトリへのパスを指定するか、参照します。
ディレクトリ パスを参照するには、次のようにします。
[追加のインクルード ディレクトリ] プロパティ値のドロップダウン リストを開き、[編集] を選択します。
[ 追加のインクルード ディレクトリ ] ダイアログボックスで、テキスト ボックスの上部をダブルクリックします。 次に、行の末尾にある省略記号ボタン ([...]) を選択します。
[ ディレクトリの選択 ] ダイアログで、レベルを上に移動し、 MathLibrary ディレクトリを選択します。 次に、[フォルダーの選択] ボタンを選択して、選択内容を保存します。
[ 追加のインクルード ディレクトリ ] ダイアログで、[ OK] ボタンを選択します。
[ プロパティ ページ ]ダイアログボックスで、[ OK] ボタンを選択して、プロジェクトへの変更を保存します。
これで、コードに
Arithmeticヘッダーを含めることによって、このアプリで#include "MathLibrary.h"クラスを使用できるようになりました。MathClient.cppの内容を次のコードに置き換えます。// MathClient.cpp // compile with: cl /EHsc MathClient.cpp /link MathLibrary.lib #include <iostream> #include "MathLibrary.h" int main() { double a = 7.4; int b = 99; std::cout << "a + b = " << MathLibrary::Arithmetic::Add(a, b) << std::endl; std::cout << "a - b = " << MathLibrary::Arithmetic::Subtract(a, b) << std::endl; std::cout << "a * b = " << MathLibrary::Arithmetic::Multiply(a, b) << std::endl; std::cout << "a / b = " << MathLibrary::Arithmetic::Divide(a, b) << std::endl; return 0; }実行可能ファイルをビルドするには、メニュー バーで [ビルド]>[ソリューションのビルド] の順に選択します。
アプリを実行する
アプリを実行するには:
MathClient が既定のプロジェクトとして選択されていることを確認します。 これを選択するには、ソリューション エクスプローラーで MathClient を右クリックしてコンテキスト メニューを開き、[スタートアップ Projectとして設定] を選択します。
メニュー バーの [デバッグ] > [デバッグなしで開始] を選択して、プロジェクトを実行します。 出力は次のようになります。
a + b = 106.4 a - b = -91.6 a * b = 732.6 a / b = 0.0747475