Help us understand the problem. What is going on with this article?

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

More than 3 years have 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をビルドする様に設定しています。

izuki_y
ライブラリを使った処理の仕方や手順はQiitaに記載する。 それ以外のアルゴル的な内容はGistに記載する
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした