CS

Static/Dynamic Library

PON_Z 2025. 1. 10. 20:18

□ 정적라이브러리(Static Library) :
정적 라이브러리는 프로그램이 "컴파일할 때 링크"되어 실행 파일에 포함됩니다.
링크 방식은 실행 파일을 생성할 때 이 라이브러리의 모든 코드가 포함됩니다.
따라서 프로그램이 실행될 때 외부 라이브러리 파일이 필요하지 않습니다.

장점 : 
1. 외부 의존성 적음 (모든소스 컴파일 타임에 링크되어, 실행 시 추가적인 라이브러리 로드 불필요, 라이브러리 자체만 있으면 실행가능)
2. 초기 로드 속도에서 유리 (정적 라이브러리는 실행 파일에 포함되어 있기 때문 별도로 로드할 필요가 없어 초기 로드 시간이 빠름)
3. 실행 속도에서 유리 (프로그램 실행시 정적라이브러리함수는 직접참조되기 때문에 호출 오버헤드가 적음)

단점 : 
1. 더 큰 실행 파일 크기 (각 프로그램마다 라이브러리 코드의 복사본을 가짐) 
2. 버전 관리 불편 (라이브러리 업데이트 시 전체 프로그램 재컴파일 필요)
3. 메모리 사용 비효율 (각 실행 파일에 라이브러리 코드가 복사되므로, 여러 프로그램이 동일한 라이브러리를 사용할 경우 메모리 낭비가 발생)

종류 : 
- .a 파일 (Archive)
.a 파일은 정적 라이브러리(Static Library)로, C 및 C++ 프로그래밍에서 사용되는 라이브러리 파일의 한 유형입니다.
.a 파일(예: libmylibrary.a)은 여러 개의 오브젝트 파일(.o 파일)을 아카이브한 파일입니다. 
각 오브젝트 파일은 C/C++ 소스 코드 파일을 컴파일한 결과물입니다.


□ 동적 라이브러리(Dynamic Library) : 
프로그램 실행 중에 필요할 때 로드되어 사용되는 라이브러리입니다.
동적 라이브러리는 "런타임"에 필요한 함수나 리소스를 동적으로 로드할 수 있습니다.
컴파일 시에는 라이브러리의 링크 정보만 포함하며, 
프로그램 실행 시 동적 라이브러리가 필요합니다(해당 파일이 시스템에 존재해야 함)
cf) 헤더 파일은 컴파일 시 필요한 것이고, 실행 시에는 필요 없음

장점 : 
1. 작은 실행파일 크기 
2. ★ 버전 관리 유리 (프로그램을 업데이트하지 않고도 라이브러리의 새 버전을 배포하여 기존 프로그램에서 새로운 기능이나 버그 수정을 사용할 수 있음)
3. 메모리 사용 효율 (여러 프로그램이 동일한 동적 라이브러리를 공유할 수 있어 메모리를 더 효율적으로 사용)

단점 : 
1. 외부 의존성 큼 (프로그램이 실행될 때, 해당 라이브러리가 시스템에 설치되어 있어야 함)
2. 초기 로드속도 불리 (프로그램이 시작할 때 동적 라이브러리를 로드해야 하므로 초기 로드 시간이 정적 라이브러리보다 김)
3. 실행 속도 불리 (동적 라이브러리의 함수는 주소를 동적으로 해석해야 하므로 호출 오버헤드가 발생, but 이 오버헤드는 일반적으로 미미한 수준)

종류 : 
- .so 파일 (Shared Object)
.so 파일은 동적 라이브러리(Dynamic Libarary)로, C 및 C++ 프로그래밍에서 사용되는 라이브러리 파일의 한 유형입니다.
.so 파일을 생성할 때 .o 파일을 사용합니다. .o 파일은 컴파일된 소스 코드로, 최종 .so 파일의 구성 요소입니다.
- .dll 파일
Windows 운영체제에서 사용하는 동적 라이브러리입니다.

=> 
선택은 애플리케이션의 요구 사항, 배포 방식, 성능 요건에 따라 달라질 수 있습니다.
예를 들어, 성능이 가장 중요한 경우 정적 라이브러리를 선호할 수 있지만, 
유지보수와 메모리 효율성을 중시한다면 동적 라이브러리가 더 바람직할 수 있습니다.


cf)  바이너리 파일 (실행파일) : 
독립적으로 실행 가능한 프로그램
컴파일과 링크 과정을 거쳐 생성된 기계어 코드
운영 체제가 직접 실행할 수 있는 형태
모든 필요한 코드와 데이터를 포함
일반적으로 더 큰 파일 크기
파일 확장자: 없음 (Linux), .exe (Windows)

728x90

'CS' 카테고리의 다른 글

컴파일, 링크, 빌드 [CS]  (0) 2024.07.03
데이터 웨어하우스 [CS]  (0) 2023.06.11
Batch and Stream Processing [CS]  (0) 2022.12.22
Data Governance [CS]  (0) 2022.12.19
Index & B-Tree [CS]  (0) 2022.12.14