우선 라이브러리가 무엇인지 알아보자.
라이브러리
공통으로 사용될 수 있는 특정한 기능들을 모듈화한 것
소프트웨어를 개발할 때 컴퓨터 프로그램이 사용하는 비휘발성 자원의 모임
특정 기능을 모와둔 코드, 함수들의 집합이며 코드 작성 시 활용 가능한 도구들
예시
- Python pip로 설치한 패키지/모듈 (tensorflow, pandas, beautifulsoup 등등)
- C++의 표준 템플릿 라이브러리 (STL)
- Node.js에서 npm으로 설치한 모듈
- HTML의 클라이언트 사이드 조작을 단순화하는 JQuery
- 웹에서 사용자 인터페이스 개발에 사용되는 React.js
이런 라이브러리는 언제 메인 프로그램에 연결하느냐에 따라서 Static Link와 Dynamic Link로 나뉘며, DLL은 이 중 후자를 뜻한다.
정적 라이브러리 lib
- 프로그램 빌드 시 라이브러리가 컴파일의 링킹 단계에서 실행 파일에 결합된다.
- 따라서 독립적으로 라이브러리 함수들을 사용 가능.
동적 라이브러리 dll
- 컴파일 후 output file이 2개 생성된다. (*.lib 파일, *.dll 파일)
- *.lib 파일은 링크 시 필요, *.dll 파일은 실행 시 필요
- DLL의 *lib 파일은 DLL이 제공하고자 하는 함수 정보를 가지는 정보 파일.
- 프로그램 실행시 dll 파일에서 함수를 참조
- 링크 단계에서 실행 바이너리의 *.obj 파일드로가 DLL 의 *.lib 파일을 함께 링크하여 이 정보를 토대로 runtime 에 DLL 함수 코드를 참조.
요약 : 컴파일 후 생성된 * lib 파일의 정보를 토대로 실행 시 *.dll 파일 함수를 참조한다.
DLL의 장점
- 실행파일의 사이즈가 작아진다.
- 재사용성이 증대된다.(한 코드를 여러 프로그램에서 사용 가능)
- DLL 업그레이드 시 해당 모듈만 교체하고 메인 프로그램은 컴파일하지 않아도 된다.
DLL 단점
- 상대적으로 속도가 느리다.
- 반드시 실행파일과 함께 배포되어야 한다.
[출처]
https://goddaehee.tistory.com/185 [갓대희의 작은공간:티스토리]
정적 라이브러리(lib) vs 동적 라이브러리(dll)
라이브러리란 특정한 코드(함수 혹은 클래스)를 포함하고 있는 컴파일된 파일입니다. 라이브러리에도 그 쓰임새에 따라서 여러가지 종류가 있습니다.(크게 3가지) 가장 흔하게 쓰일수 있는 “정
ence2.github.io