Modularize program > seperate components > ease deployment & installation
https://medium.com/ai-innovation/how-to-create-c-c-dynamic-link-libraries-in-windows-28abefc988c9
1. Setup
윈도우에서 Shared libraries는 dynamic-link libraries (.dll) 이라고 부른다.
다른 플랫폼에서 shared object 는 .so 확장자를 사용한다.
2. Implementation
root
|_ include
|_ obj
|_ src
- include: 헤더 파일 저장, 컴파일된 공유 라이브러리와 상호작용 하는 방법에 대한 참조
- obj: 컴파일 중 생성된 임시 obj 파일 저장. (안전하게 삭제 가능)
- src: 함수 필수 코드 저장, 배포하는 동안 패키지에서 이러한 파일 제외
Header
include
|_add.h
#ifndef _ADD_H
#define _ADD_H
extern "C"
{
__declspec(dllexport) int add(int, int);
__declspec(dllexport) int sub(int, int);
__declspec(dllexport) int mul(int, int);
}
#endif
Implementation code
src
|_add.cpp
#include "add.h"
extern "C"
{
__declspec(dllexport) int add(int a, int b)
{
return a + b;
}
__declspec(dllexport) int sub(int a, int b)
{
return a - b;
}
__declspec(dllexport) int mul(int a, int b)
{
return a * b;
}
}
Main
include
obj
src
main.cpp
#include <iostream>
#include "add.h"
int main() {
std::cout << add(2, 2) << " | " << sub(3, 1) << " | " << mul(3, 3) << std::endl;
return 0;
}
Object Files
cl /EHsc /c .\src\*.cpp /I .\include /Fo".\obj\\"
/c: 소스 파일 위치
/I: 헤더 파일 위치
/Fo: 컴파일 중 생성될 임시 obj 파일 위치
Dynamic-link libraries
link /DLL /OUT:add.dll .\obj\*.obj
include
obj
src
add.dll
add.exp
add.lib
main.cpp
add.dll - shared library for program
add.exp - export library program
add.lib - static libarary
Executable file
마지막 실행 파일 만들기!
cl /EHsc main.cpp /Fetest.exe /I .\include /link *.lib
include
obj
src
add.dll
add.exp
add.lib
main.cpp
main.obj
test.exe
'👩💻 도비는 공부중 > 💼 하계연구연수생(2023)' 카테고리의 다른 글
[PyQt5] Python을 위한 GUI 라이브러리 (0) | 2023.07.14 |
---|---|
[Binary Protocol] (0) | 2023.07.13 |
[기술 동향] (0) | 2023.07.12 |
[Python] C 함수 호출을 위한 Wrapper 만들기 (0) | 2023.07.11 |
[Python] Flask 기초 (0) | 2023.07.11 |