【C++】ライブラリとリンク

ライブラリ

複数の機能をまとめた部品

静的リンク

プログラムを動かす際に、ライブラリ内のルーチンを実行可能プログラムに含める方法
これに対応したライブラリが静的リンクライブラリ

動的リンク

プログラムの実行時に、メモリ上でリンクを行う方法
これに対応したライブラリが動的リンクライブラリ(共有ライブラリ)

静的リンクと動的リンクの違いの確認

静的リンクライブラリの作成
MyStaticLibプロジェクトを作成し、以下の2つのファイルを作成する
MyStatic.h

#pragma one

class MyStatic
{
public:
  int Calc(int a, int b);
}
MyStatic.cpp

#include "MyStatic.h"

int MyStatic::Calc(int a, intb)
{
  return a + b;
}
動的リンクライブラリの作成
MyDynamicLibプロジェクトを作成し、以下の2つのファイルを作成する
MyDynamic.h

#pragma one
#ifdef MYDYNAMICLIB_EXPORTS
#define MYDYNAMICLIB_API __declspec(dllexport)
#else
#define MYDYNAMICLIB_API __declspec(dllimport)
#endif

class MyDynamic
{
public:
  MYDYNAMICLIB_API int Calc(int a, int b);
}
MyDynamic.cpp

#include "MyDynamic.h"

int MyDynamic::Calc(int a, int b)
{
  return a + b;
}
実行ファイルの作成
上記で作成した2つのライブラリを使用するファイルを作成する

#include <iostream>
#include <MyDynamic.h>
#include <MyStatic.h>

int main()
{
  auto myDynamic = std::make_unique<MyDynamic>();
  auto myDynamicRet = myDynamic->Calc(5, 10);
  std::cout << myDynamicRet <<std::endl;
  
  auto myStatic = std::make_unique<MyStatic>();
  auto myStaticcRet = myStatic->Calc(1, 20);
  std::cout << myStaticRet <<std::endl;
}
実行①
実行ファイルを実行すると、15,21が表示される。
実行②
各Calc関数を足し算から引き算に変更後にビルドして、実行ファイルを実行すると、-5, 21が表示される。