개요

라이브러리는 프로그램을 개발할 때 자주 사용되는 기능 모듈들을 패키지 형태로 만들어서 새로운 프로그램 제작시 적재하여 사용 가능하도록 한 것이다. 라이브러리를 사용함으로써 소스에 대한 재사용성과 유지보수 효율을 높일 수 있다. 리눅스에는 정적(static), 공유(shared), 동적(dynamic) 라이브러리 형태를 사용 가능하다.

종류

정적, 공유, 동적 라이브러리는 적재 시간이 다르다.

정적 라이브러리

정적 라이브러리(static library)는 오브젝트 파일들의 단순 모음이다. 단순 모음이라고 한 의미는 ar명령어를 사용하여 오브젝트 파일들을 archive한 것이기 때문이다. 정적 라이브러리로 만든 프로그램은 실행 파일만으로 프로그램 실행이 가능하기 때문에 의존성에 대한 문제를 줄일 수 있다. 하지만 실행 프로그램을 컴파일할 때 라이브러리가 함께 적재 되어 일반적으로 프로그램의 사이즈를 크게 만든다. 리눅스에서 정적 라이브러리는 .a(archive) 확장자를 가진다.

공유 라이브러리

공유 라이브러리(shared library)는 프로그램이 실행 될 때 적재 된다. 좀 더 정확히 표현하면 이미 프로그램이 사용해야 할 라이브러리가 존재하는 상태이면 해당 메모리 주소로 링크만 할 뿐 새로 적재 되지 않는다. 즉, 한 메모리 위치에 있는 라이브러리를 여러 프로그램이 공유하는 것이다. 이러한 방식은 프로그램 실행 시간을 단축시키고 메모리 효율을 높일 수 있다. 리눅스에서 공유 라이브러리는 .so(shared object) 확장자를 가진다.

동적 적재 라이브러리

동적 적재 라이브러리(dynamic load library)는 프로그램이 실행 시점에서 라이브러리가 로드되는 것이 아니라 프로그램 수행 중에 필요시 라이브러리가 로드되는 형태이다. 사실 공유 라이브러리도 동적 라이브러리인데 로드되는 것과 링크되는 시점이 다른 것이다. 또한, 공유 라이브러리는 메모리에 이미 적재된 동일한 라이브러리를 여러 프로그램에서 동적으로 링크하여 사용하는 것이 다른 것이다. 동적 적재 라이브러리는 플러그인 형태의 모듈을 구현할 때 유용하다.

참고