Libファイル編です
Libファイルはビルド時にリンクされるプログラムの部品です

前もって完成した複数のソースファイルをコンパイルしてLibファイルにしておけば、
そのLibファイルをリンクさせるだけで済むので
次回以降は、そのソースファイルのコンパイルの作業を省くことができます
プログラムが大きくなるほど、ソースファイル(.cpp)が増え
コンパイルに時間がかかるのでこのようにあらかじめコンパイルしておくことで
その完成した部品(モジュールといいます)をリンクさせるだけで使えるようになります
つまりLibにすることで
・複数のソースファイルをコンパイルして1つのLibファイルへまとめることができる
・コンパイル時間を短縮することができる
のメリットがあります

今回はLibファイルを自作して、使ってみましょう
まず、Visual StudioでWin32コンソールアプリケーションもしくはWin32プロジェクトを選びます

&ref(lib2.GIF);

次へを選びます

&ref(lib3.GIF);

「スタティックライブラリ」を選択し、
「プリコンパイラ済みヘッダー」のチェックをはずし
完了を押します

&ref(lib1.GIF);

プロジェクトが生成され
ソリューションエクスプローラが次のようになります

&ref(lib4.GIF);

ReadMe.txtは自動生成されたものですが
プロジェクトには全く関係ないので削除してもかまいません

新規ファイルを作ります
ここでは、簡易的にテスト用の関数とクラスを作成します
ここでは適当にMyLib.cppとMyLib.hとしておきます
作り方は分割コンパイル編を参考にしてください

MyLib.hです
	// MyLib.h
 
	// 多重インクルードガード
	#ifndef _MYLIB_H_
	#define _MYLIB_H_
 
	#include <stdio.h>
 
	// テスト用関数
	void TestMyLib();
 
	// テスト用クラス
	class CTestMyLib
	{
	public:
		int a;
		// コンストラクタ
		CTestMyLib();
	};
 
	#endif // _MYLIB_H_

MyLib.cppです
	// MyLib.cpp
 
	#include "MyLib.h"
 
	// テスト用関数実装
	void TestMyLib()
	{
		printf("Hello MyLib\n");
	}
 
	/////////////////////////////////////
	// テスト用クラス実装
 
	// コンストラクタ
	CTestMyLib::CTestMyLib():a(10)
	{
	}

MyLibプロジェクトのプロパティからコード生成の項目を選びます
Debugモードならマルチスレッドデバック(MTd)を選びます

&ref(lib6.GIF);

Releaseモードならマルチスレッド(MT)を選びます

&ref(lib7.GIF);

コード生成の設定後ビルドをします

&ref(lib5.GIF);

ビルド後、プロジェクトのDebugもしくはReleaseフォルダにLibファイルが生成されています
&ref(lib8.GIF);
&ref(lib9.GIF);

続いて、今作ったLibファイルを早速使ってみたいと思います
TestLibという空のプロジェクトを作ります
機能編の空のプロジェクトの作り方と同じです

&ref(lib10.GIF);

TestLibプロジェクトのフォルダに先ほど作った
MyLib.hとMyLib.libファイルをコピーします
TestLibプロジェクトがDebugモードならMyLib.libはDebugモードで生成したものを
TestLibプロジェクトがReleaseモードならMyLib.libはReleaseモードで生成したものを
使います
MyLib.cppはコンパイル済みのものがMyLib.libファイルなので不要です

&ref(lib11.GIF);

追加後、プロジェクトにヘッダーファイルを追加し
MyLibファイルの機能を使用してみます

main.cppを作成します

 // main.cpp
 #include "MyLib.h"
 
 // Libファイルをリンク時にリンクさせる
 #pragma comment(lib,"MyLib.lib")
 
 int main(){
	CTestMyLib test;
 	
	// Lib関数
	TestMyLib();
	// Libクラステスト
	printf("MyLibTest a = %d\n",test.a);
 }

&ref(lib12.GIF);

TestLibプロジェクトのプロパティからコード生成の項目を選びます
Debugモードならマルチスレッドデバック(MTd)を選びます
Releaseモードならマルチスレッド(MT)を選びます
コード生成はMyLib側と統一しておいてください

&ref(lib14.GIF);

ビルドして成功すれば、次のようになります

&ref(lib13.GIF);

ちゃんと呼び出せていますね

次のようなリンカの警告(もしくはエラーが出た場合)、
MyLib側とTestLib側のコード生成が同じであるか確認してください

&ref(lib14.GIF);

---------------------------------------------------------------
今回のソースファイルは下からダウンロードできます
&ref(Lib.zip);


#vote((^ω^)やったお[0],何これwww意味不すぎwww[0],。(`ω´#)。あぁん?最近、だらしねぇな[0])

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS