Search

[1장 리눅스 개요]4.라이브러리

Publish Date
Category
Status
Done
1 more property
라이브러리
라이브러리와 정적 및 동적 라이브러리의 차이를 실습을 통해 학습한다.

라이브러리

라이브러리는 여러 프로그램에서 공통으로 사용하는 함수와 데이터를 모아둔 것이다. 이를 통해 개발자는 효율적으로 프로그램을 작성할 수 있다. 특히, 운영체제(OS)는 기본적인 시스템 기능을 제공하는 라이브러리를 제공한다.

표준 C 라이브러리(glibc)

운영체제가 제공하는 대표적인 라이브러리로, C언어 표준 라이브러리인 glibc(GNU C Library)가 있다. 이를 통해 대부분의 C프로그램이 표준 함수와 시스템 콜을 사용할 수 있다.
예시: ldd 명령어를 통해 사용하는 라이브러리를 확인
# ldd /bin/echo # ldd /bin/cat # ldd /usr/bin/python3
Python
복사
libc.so.6: 표준 C라이브러리
예시: 시스템에 존재하는 다양한 프로그램 라이브러리 확인
# dpkg-query -W | grep ^lib
Python
복사

정적 vs 동적 라이브러리

라이브러리는 정적동적(공유) 두 가지로 나뉜다. 모두 같은 기능을 제공하지만 프로그램과 결합하는 방식이 다르다.
구분
정적 라이브러리 Static Library
동적 라이브러리 Dynamic Library
링크 방식
함수가 프로그램에 포함됨
프로그램 실행 시 라이브러리를 로드
파일 크기
실행 파일 크기 증가
실행 파일 크기 작음
라이브러리 수정
모든 실행 파일 재컴파일 필요
라이브러리 교체로 모든 프로그램 업데이트 가능
공유 자원
각각 독립적으로 코드 사용
메모리와 코드 공유 가능
예시: 정적 라이브러리
# cc -static -o pause pause.c # ls -l pause -rwxr-xr-x 1 root root 608288 Dec 20 05:38 pause # ldd pause not a dynamic executable
Shell
복사
파일 크기: 약 600KB
동적 라이브러리 링크 없음.
예시: 동적 라이브러리
# cc -o pause pause.c # ls -l pause -rwxr-xr-x 1 root root 9208 Dec 20 05:41 pause # ldd pause linux-vdso.so.1 (0x0000ffff8b239000) libc.so.6 => /lib/aarch64-linux-gnu/libc.so.6 (0x0000ffff8b084000)
Shell
복사
파일 크기: 약 9KB
libc.so.6 동적 링크.

동적 라이브러리 장점

시스템에서 차지하는 크기를 줄일 수 있다.
라이브러리에 문제가 있을 때 공유 라이브러리를 수정 버전으로 교체하면 되므로 유지보수가 용이하다.

정적 라이브러리 선호 추세

최근 언어(예: Go)는 정적 링크를 다시 선호하는 추세다.
단일 파일 실행: 환경에 관계없이 프로그램 실행 가능
빠른 시작 시간: 실행 시 추가 로드 작업 필요 없음
DLL 지옥 문제 방지: 라이브러리 버전 충돌을 피할 수 있음

마무리

라이브러리: 프로그램 개발 시 공통적으로 사용하는 기능을 제공하는 재사용 가능한 코드 집합
표준 C 라이브러리(glibc): C언어 프로그램에서 사용되는 표준 함수와 시스템 콜 래퍼를 제공하는 GNU 프로젝트의 라이브러리
시스템 콜 래퍼: 고급 언어에서 시스템 콜을 쉽게 호출할 수 있도록 제공되는 함수로, 아키텍처 의존성을 추상화
정적 라이브러리: 프로그램 빌드 시 라이브러리 코드를 실행 파일에 포함시키는 방식으로 독립적으로 동작
동적 라이브러리: 프로그램 실행 중에 메모리에 로드되어 모든 프로그램에서 공유되는 방식의 라이브러리

Q&A

Q. 정적 라이브러리와 공유 라이브러리의 차이점은 무엇인가요?
Q. 시스템 콜 래퍼 함수와 공유 라이브러리는 어떤 관계가 있나요?
Q. 정적 링크와 동적 링크의 실제 사용 사례는 무엇인가요?
Q.DLL 지옥이란 무엇인가요?
Search
Main PageCategoryTagskkogggokkAbout MeContact