スタティックライブラリを作って読み込んでみる

More than 1 year has passed since last update.


はじめに

Visual Studio 2017 でスタティックライブラリ(.lib)を使って実行ファイルを作る方法を記載しておきます。

Visual Studio では複数のプロジェクトをまとめて管理するためのソリューションと呼ばれるコンテナが簡単につくれます。

これを使うとスタティックライブラリと実行ファイルアプリを単独で作れるのでとても便利です。

[イメージ]

ソリューション
├プロジェクト1(.lib)
└プロジェクト2(.exe) ← プロジェクト1(.lib)を使用するプロジェクト


ソリューション(とスタティックライブラリのプロジェクト)を作成

ファイル(F) -> 新規作成(N) -> プロジェクト(P) の順で選択してソリューションと新規プロジェクトを作成する。

新しいプロジェクト1.png



  • Win32 プロジェクトを選択

  • 名前(N)をLibProjectにする

  • ソリューション名(M)をHelloWorldにする

次へ -> アプリケーション設定画面まで遷移する。

project2.png



  • スタティックライブラリ(S)を選択

  • それ以外のチェック項目は外す

ソースファイル -> 追加 -> 新しい項目 から StaticLibTest.c を作成して以下をコピペ

#include <stdio.h>

#include "StaticLibTest.h"

int TestFunc() {

printf("Hello World\n");

return 0;
}

ヘッダーファイル -> 追加 -> 新しい項目 から StaticLibTest.h を作成して以下をコピペ

#pragma once


int TestFunc();

ビルドしてHelloWorld/DebugLibProject.libが出来ている事を確認する。


実行プロジェクトの追加

ソリューション(HelloWorld)を選択して 追加 -> 新しいプロジェクトを選択

project4.png

+ 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にチェックアウトします。

ソリューション.png

これはEXEProjectはLibProjectに依存しているため、LibProjectが正しくビルド出来てからEXEProjectをビルドする様に設定しています。