1. 라이브러리
ㅇ 프로그램 재사용 및 생산성 향상을 위해,
- 프로그램 내부처리에 깊이 관여 않도록 도와주는,
- 유용하고 공통적인 함수들의 집단
2. 라이브러리 특징
ㅇ 재사용이 가능하도록 작성되고,
ㅇ 미리 컴파일된채 특정 라이브러리 파일에 담아둔,
ㅇ 함수들의 모음
※ (이들은 대개 공통적인 작업을 수행하기 위한 일련의 함수들로 구성됨)
3. 언어별 표준 라이브러리
ㅇ 특정 프로그래밍 언어 마다, 자주 사용되는 표준적인 소스 코드들을,
- 미리 구현시켜 모아놓은 라이브러리를 말함
. 例) 표준 C 라이브러리 (libc), C++ STL
. 例) 파이썬 표준 라이브러리 등
4. C 언어 라이브러리
※ ☞ C 라이브러리 참조
- 주로, 표준 C 라이브러리 (약칭, `libc`)를 말함
- 통상, 미리 컴파일되어 라이브러리 파일 형태로 제공되는 것
5. UNIX/Linux 시스템에서, 라이브러리의 특징
ㅇ 라이브러리 위치 : /lib, /lib64, /usr/lib 등
ㅇ 라이브러리 이름 : 항상 lib로 시작함
- 例) lib[라이브러리명칭].so.[버전]
ㅇ 정적, 동적 구분
- 정적 라이브러리 : 파일 이름이 .a로 끝남
. 추가 필요한 다른 라이브러리들을, 모두 실행 프로그램에 포함시키는 방법
- 공유 라이브러리 (동적 라이브러리) : 파일 이름이 .so 및 .sa로 끝남
. 추가 필요한 다른 라이브러리들에 대한 연결고리 만을, 갖도록 하는 방법
.. 메모리에 올려놓고, 관련된 실행 프로그램이 이와 연결되도록 함
.. 여러 어플리케이션에서 공유 가능
.. 공유 라이브러리는 많은 점에서 MS 윈도우즈의 동적 링크 라이브러리(DLL)와 비슷
* 라이브러리 링크 시점 상의 구분
. 동적 링크 방식 : `실행 파일이 메모리에 로드될 때`, 링크됨
. 정적 링크 방식 : `실행시 필요에 따라`, 메모리에 로드,링크됨
* [참고] 리눅스에서, 동적 라이브러리의 의존성을 보여주는 명령어 : ldd
6. 런타임 라이브러리
※ ☞ 시스템 콜 (시스템 호출 API) 참조
- 커널은, 시스템 호출 API를 통해, 광범위한 서비스를 제공하게 됨
- 관련 헤더 파일 例)
. fcntl.h (열려있는 파일의 특성 제어를 위해서 사용), syscall.h, unistd.h 등
※ ☞ API 참조
- 프로그램이 쉽게 이용할 수 있도록, 규격화된 응용 서비스들의 모음
7. [참고사항] 라이브러리 호출, 시스템 호출 간의 비교
ㅇ 라이브러리 호출
- 실행 주체 : 언어 또는 어플리케이션의 일부임
- 실행 위치 : 사용자 공간에서 실행됨
- 例) system, fprintf, malloc 등
ㅇ 시스템 호출
- 실행 주체 : 운영체제의 일부임
. 트랩 또는 인터럽트를 통해, 운영체제 커널에 의뢰함
- 실행 위치 : 커널 공간에서 실행됨
- 例) chdir, fork, write, brk 등