본문 바로가기
개념공부/기타

정적 라이브러리와 동적 라이브러리

by Zach Choi 2022. 4. 26.
728x90
반응형

오픈소스를 사용하려다 보니 라이브러리라는 개념을 처음 사용하게 됐다. 

 

라이브러리란 코드를 포함한 컴파일된 파일을 의미한다. 오픈 소스 사용시, 오픈소스의 소스코드를 모두 긁어다가 사용할 수 있지만, 그것보다 라이브러리 형태로 본 프로젝트에 링킹시켜 사용하는게 더 편리하다. 오픈 소스의 모든 소스코드를 쓸게 아니기 때문이다.

 

라이브러리는 3개의 종류가 있다. 각각 '정적 라이브러리 (Static Library)', '동적 라이브러리 (Dyanmic Library)', '공유 라이브러리 (Shared Library)'이다. 각 라이브러리는 본 프로젝트에 로드되는 시점에 따라 구분할 수 있다.

 

  • 정적 라이브러리 (Static Library)
    • 정적 라이브러리의 확장자명은 .lib 이다. 그런데 동적 라이브러리 파일에도 .lib 파일이 있으므로 헷갈리면 안된다.
    • 정적 라이브러리는 본 프로그램 빌드 시 라이브러리가 제공하는 코드를 실행 파일(.exe)에 포함한다. (따라서 별도의 라이브러리 파일을 실행파일과 같은 디렉토리에 복사해둘 필요가 없다.)
    • 정적 라이브러리는 본 프로그램의 컴파일 중 링킹 단계에서 실행 파일(.exe)에 링크 된다.
    • 정적 라이브러리의 코드가 이를 사용 하는 본 프로그램의 실행 바이너리에 포함된다.
    • 정적 라이브러리를 사용할 때는, 본 프로그램에서 컴파일 시 링커가 프로그램에서 사용하는 부분을 찾아서 실행파일에 복사한다.
    • 정적 라이브러리의 코드가 본 프로그램의 실행 파일에 결합되기 때문에, 실행 파일 용량이 커진다. 
    • 정적 라이브러리가 업데이트 되면, 본 프로그램을 재 빌드해야 한다.
    • 정적 라이브러리는 다른 라이브러리 대비 속도가 빠르다. (외부 참조를 하지 않기 때문)
  • 동적 라이브러리 (Dynamic Library)
    • 동적 라이브러리의 확장자 명은 .dll 이다. 그런데 동적 라이브러리는 .lib 파일 또한 생성된다.
    • 동적 라이브러리 컴파일 시 생성된 .lib 파일은 .dll 이 제공하는 함수 명을 가진 정보 파일이다.
    • 동적 라이브러리는 프로그램 실행 중 호출될때만 DLL 파일에서 함수가 참조된다.
    • 본 프로그램의 컴파일 중 링크 단계에서 실행 바이너리의 .obj 파일들과 DLL의 .lib파일이 함께 링크되어, 이를 기반으로 본 프로그램 실행 중 .dll 파일의 함수 코드를 참조하게 된다.
    • .lib 파일은 본 프로그램 컴파일 중 링크 과정에서, .dll 파일은 실행 과정에서 필요하다.
    • 동적 라이브러리를 사용하면 실행 파일의 용량이 줄어든다. 
    • 동적 라이브러리 업데이트 시, 본 프로그램은 별도의 빌드를 하지 않아도 된다.
    • 동적 라이브러리는 외부 참조를 하므로 정적 라이브러리에 비해 시간이 느릴 수 있다.
    • 실행 파일 배포 시 동적 라이브러리를 함께 배포해야 한다.
  • 공유 라이브러리 (Shared Library)
    • 공유 라이브러리는 동적 라이브러리와 동일하게 런타임에 메모리에 적재된다. 그런데 공유 라이브러리는 프로그램이 시작되는 순간에 메모리에 적재되고, 동적 라이브러리는 프로그램에서 해당 라이브러리의 코드가 필요할 때 적재된다.
728x90
반응형

'개념공부 > 기타' 카테고리의 다른 글

CUDA Tool kit 설치  (0) 2022.04.28
C++ 코드를 웹 서비스/어플리 케이션으로 만드는 방법  (0) 2022.04.27
라이센스 검색 시스템  (0) 2022.04.25
CUDA 2. Programming Model  (0) 2022.04.24
곡률 (Curvature)  (0) 2022.02.10