Swimmer

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

개념공부/기타

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

Zach Choi 2022. 4. 26. 15:10

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

 

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

 

라이브러리는 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)
    • 공유 라이브러리는 동적 라이브러리와 동일하게 런타임에 메모리에 적재된다. 그런데 공유 라이브러리는 프로그램이 시작되는 순간에 메모리에 적재되고, 동적 라이브러리는 프로그램에서 해당 라이브러리의 코드가 필요할 때 적재된다.

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

Gaussian Process 공부 중  (0) 2022.05.01
C++ 코드를 웹 서비스/어플리 케이션으로 만드는 방법  (0) 2022.04.27
라이센스 검색 시스템  (0) 2022.04.25
곡률 (Curvature)  (0) 2022.02.10
Apache 2.0 License (작성 중)  (0) 2021.12.31
Comments