---
# System prepended metadata

title: 라이브러리에 대해서

---

# 라이브러리에 대해서
2419 허가온
## 정적 라이브러리
link단계에서 라이브러리파일을 실행 바이너리에 포함시킨다는 이야기이다.
따라서 별도의 추가 작업없이 단독적으로 사용할 수 있다.
하지만 실행파일 크기가 커지며 메인 메모리의 공간 활용이 떨어진다.
## 동적 라이브러리
동적으로 링크하여 사용하는 라이브러리이다. 실행 바이너리에서 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하거나 독립적 dll을 사용할수도있다.
## __declspec(dllimport)
export한 함수를 응용프로그램에서 사용하기 위해서 사용해야한다.
## __declspec(dllexport)
dll에서 함수, 변수, 클래스를 export하기위해 사용한다.
dll의 인터페이스를 정의하는 DEF(module definition file)을 포함시킬필요 없다. 
## extern c
A회사 컴파일러를 이용하여 DllA 을 만들었다면 B회사에서
DllA을 사용할려고 한다면 함수의 주소를 얻지 못해 사용하지 못하는 문제가 발생한다.
이 문제를 해결하기 위해 extern "C" 라는 코드를 사용하여 이름 데코레이션을 사용
하지 않고 똑같은 이름으로 함수를 익스포트 시키는데 이게 c++ Name decoration이
아닌 c언어 형태의 Name decoration룰을 따라 함수의 이름을 생성하게 된다.