<aside> 💡
라이브러리 : 여러 프로그램에서 자주 사용하는 함수와 데이터들을 실행이 가능한 바이너리 형태로 묶어놓은 것
static → .lib (window) .a (linux) : 사용자 실행파일에 라이브러리 코드 포함
특징:
장점:
단점:
VS2022


| 구분 | 정적 라이브러리 (Windows) | 정적 라이브러리 (유니버셜 Windows) |
|---|---|---|
| 용도 | 일반 Win32/콘솔/GUI 실행 파일(.exe)에서 사용 | 유니버셜 Windows 앱(UWP, Microsoft Store 앱 등)에서 사용 |
| 대상 플랫폼 | Windows 데스크탑, 콘솔, MFC, Qt, WinAPI 등 | UWP 앱, Xbox, IoT 등 특수 목적 |
| 빌드 결과 | .lib 파일 | |
| (일반적인 C++ 라이브러리) | .lib 파일 | |
| (UWP 전용) | ||
| 호환성 | 모든 일반 Windows 실행 파일에서 사용 가능 | UWP 앱에서만 사용 가능, Win32와 호환 불가 |
dynamic (shared - linux) → .dll (window) .so (linux) : 사용자 실행파일에 라이브러리 코드 미포함, 실행시 dll파일 동적로드사용
특징:
장점:
단점:

dynamic-load
Dynamic-Load-Library 동적로드라이브러리 [WINDOW].dll [LINUX].so
:
//-------------------------------------------------------------------------------
DLL적용예시 /*
- 동적라이브러리의 인터페이스에 특정 함수나 변수를 등록하고 싶다면 각 선언에 아래 키워드를 개별-지정
- 등록하지 않을 경우, 라이브러리내부에서는 정상적으로 실행되나 외부프로젝트에서는 조회불가
- 프로젝트타입이 lib인 경우, 해당 키워드를 사용하더라도 무조건 정적라이브러리로 빌드됨 */
// [library_header.h]
#ifdef DLL_EXPORTS
#define DLL_API __declspec(dllexport) // 함수를 dll외부로 수출 (dll빌드)
#else
#define DLL_API __declspec(dllimport) // 함수를 dll에서 수입 (사용자)
#endif
static bool DLL_API Function();
// [library_source.cpp] // 정의문-사용으로 dllexport로 실행되도록 컴파일됨
#include "library_header.h"
#define DLL_EXPORTS
bool DLL_API Function() {
}
// [Project.cpp] // 외부프로젝트는 #define DLL_EXPORTS 없는 헤더만 접근하므로 dllimport로 실행됨
#include "Project.h"
#include "library_header.h"
void main() {
Function();
}