はじめに
Visual Studio 2017 でスタティックライブラリ(.lib)を使って実行ファイルを作る方法を記載しておきます。
Visual Studio では複数のプロジェクトをまとめて管理するためのソリューションと呼ばれるコンテナが簡単につくれます。
これを使うとスタティックライブラリと実行ファイルアプリを単独で作れるのでとても便利です。
[イメージ]
ソリューション
├プロジェクト1(.lib)
└プロジェクト2(.exe) ← プロジェクト1(.lib)を使用するプロジェクト
ソリューション(とスタティックライブラリのプロジェクト)を作成
ファイル(F) -> 新規作成(N) -> プロジェクト(P)
の順で選択してソリューションと新規プロジェクトを作成する。
-
Win32 プロジェクト
を選択 - 名前(N)を
LibProject
にする - ソリューション名(M)を
HelloWorld
にする
次へ -> アプリケーション設定
画面まで遷移する。
-
スタティックライブラリ(S)
を選択 - それ以外のチェック項目は外す
ソースファイル -> 追加 -> 新しい項目 から StaticLibTest.c
を作成して以下をコピペ
#include <stdio.h>
#include "StaticLibTest.h"
int TestFunc() {
printf("Hello World\n");
return 0;
}
ヘッダーファイル -> 追加 -> 新しい項目 から StaticLibTest.h
を作成して以下をコピペ
#pragma once
int TestFunc();
ビルドしてHelloWorld/Debug
にLibProject.lib
が出来ている事を確認する。
実行プロジェクトの追加
ソリューション(HelloWorld)を選択して 追加 -> 新しいプロジェクトを選択
-
Win32 プロジェクト
を選択 - 名前(N)を
EXEProject
にする - ソリューション名(M)を
HelloWorld
にする
ソースファイル -> 追加 -> 新しい項目 から main.c
を作成して以下をコピペ
#include "StaticLibTest.h"
int main() {
TestFunc();
return 0;
}
プロパティ設定
ここからはスタティックライブラリから関数を呼び出す為の設定を行います。
スタティックライブラリから関数の呼び出しですが、まずはスタティックライブラリでの.hが必要になります。
今回の例ですとStaticLibTest.h
です。
これをVisual Stduioの構成プロパティ -> C/C++ -> 追加インクルード
で指定しましょう。
指定するときはLibProjectの.hの場所を相対パスで参照しましょう。
次に使用するlibの指定を行います。
構成プロパティ -> リンカ -> 入力 -> 追加の依存ファイル
に追加しましょう。
最後に使用するlibが置いてあるディレクトリの指定を行います。
構成プロパティ -> リンカ -> 全般 -> 追加のライブラリディレクトリ
に追加しましょう。
ライブラリはソリューション直下のDebugフォルダ内を指定する。
これでLibProject -> EXEProject の順でビルドすればビルドが通りHelloWorldが表示される事が確認出来ると思います。
もしかしたら
ソリューションのリビルドを行ったり、EXEProjectを先にビルドするとLNK1104 ファイルLibProject.libを開くことが出来ません
とエラーが出るかもしれません。
そのときはソリューションからのプロパティでプロジェクトの依存関係
を選択してプロジェクトをEXEProjectに選択して依存先LibProjectにチェックアウトします。
これはEXEProjectはLibProjectに依存しているため、LibProjectが正しくビルド出来てからEXEProjectをビルドする様に設定しています。