■ 프로그래밍에 사용할 수 있게 미리 만들어져 있는 함수나 변수들의 묶음


(1) 라이브러리의 개요
: 리눅스에서 프로그램을 개발하다 보면 여러 사람들이 함께 개발하는 경우가 종종 있다.
그 때 같은 기능을 여러 사람이 공동으로 사용하게 되는 경우가 있는데, 그러한 기능을 각각의 소스 프로그램에 함수로 넣어 사용하는 방법보다는 라이브러리를 만들어 함께 사용하면 여러가지 이점들이 있다.

- 사용하기가 훨씬 편리
- 같은 소스코드를 중복 기술하지 않아 효율적인 프로그램 작성 가능
- 다른 프로젝트에도 손쉽게 활용 가능

  ○ 기본적으로 제공되는 표준 라이브러리는 /usr/lib에 존재한다.
  ○ c 컴파일러는 프로그램 컴파일 시 기본적으로 이 디렉토리(/usr/lib)에서 라이브러리 함수를 찾아 링크 수행.
  ○ gcc 의 -L 과 -l 옵션을 이용하면 다른 디렉토리에 있는 라이브러리도 이용할수 있음 .
  ○ 라이브러리의 이름은 lib로 시작되며 라이브러리의 의미를 나타내는 이름 다음에 파일의 확장자 .a .so로 구성된다.
  (ex) libm.a libm.so
   여기서 m은 math 즉 수학관련 라이브러리를 의미한다.
   이 라이브러리를 이용하여 컴파일 할때에는 다음과 같이 명령을 수행한다.
   -> gcc sample.c -o -lm (libm -> l(ib)m)


(2) 라이브러리의 종류
: 라이브러리에는 정적(static)라이브러리공유(shared)라이브러리 두 종류가 있다.

정적라이브러리
 : 미리 만들어 놓은 라이브러리 함수의 오브젝트 코드를 ar 도구를 이용하여 아카이브로 만들어 놓은 것.

- 컴파일 과정 중 링크 단계에서 프로그램의 오브젝트 코드와 지정한 라이브러리의 오브젝트코드를 결합하여 하나의 실행 / 가능한 파일을 생성한다.


  ○ 이 정적 라이브러리 파일은 확장자로 .a를 가지며 이 라이브러리 함수를 이용할 때에는 관련된 헤더파일을 include하여 사용.


- 정적 라이브러리 생성방법


  ○ gcc -c mystatic.c : mystatic 파일의 오브젝트 코드를 생성한다.
  ○ ar rv libmystatic.a mystatic.o : ar명령을 이용하여 라이브러리 파일을 생성한다.
  ○ 위 명령을 치면 libmystatic.a 파일이 생긴다.

정적 라이브러리 함수 호출예

  ○ 정적라이브러리 함수를 호출하면서 컴파일을한다.
  ○ gcc mymain1.c -o mymain1 -lmystatic -L.
  ○ 여기서  -lmystatic -L. 는 현재 파일에 있는 라이브러리를 쓴다는 뜻이다.
  ○ 위에서 -L 과 -l (소문자 엘) 옵션을 이용하면 다른 디렉토리에 있는 라이브러리도 이용할 수 있음.


■ 공유라이브러리
: 정적 라이브러리를 이용하여 실행 파일을 생성하면 실행 파일에  라이브러리 함수의 코드가 포함된다. 따라서 이 라이브러리 함수를 여러 프로그램에서 사용하면 각각의 실행 파일에 라이브러리 함수의 코드가 포함된다.

따라서 이 라이브러리 함수를 여러 프로그램에서 사용하면 각각의 실행 파일에 라이브러리 함수의 코드가 포함되고 동일한 함수의 코드가 메모리 여러 군대에 존재하게 된다. 이는 메모리나 하드 디스크 공간이 그 만큼 낭비된다는 의미이다.
 
이와 같은 정적 라이브러리 함수의 단점을 극복한 것이 공유 라이브러리이다.


프로그램이 공유 라이브러리를 사용하면 실행 파일에 라이브러리 함수 코드가 포함되는 것이 아니라, 실행 시 사용 가능한 공유코드를 참조하는 방식으로 링크된다. 따라서 이 공유 라이브러리 함수를 이용하는 프로그램이 여러개 일지라도 하나의 라이브러리를 함께 이용하므로, 메모리나 하드디스크를 효과적으로 사용할 수 있다.

리눅스에서 공유 라이브러리를 로드하고 참조 함수를 확인하는 프로그램을 동적 로더(ld.so)라고 한다.
이 로더는 /etc/ld.so.conf 에 설정된 경로를 이용하여 공유 라이브러리를 검색한다.

이 구성 파일에 경로를 추가한 후 ldconfig명령을 이용하면 캐쉬를 업데이트 한다.



※ 출처 : http://babuzzzy.tistory.com/entry/4-리눅스-시스템-프로그래밍-컴파일-라이브러리-생성

'P rogramming > Linux System' 카테고리의 다른 글

정적 라이브러리 생성  (0) 2011.09.30
정적 라이브러리의 구조 - ar, ranlib  (0) 2011.09.29
라이브러리 함수 목록  (0) 2011.09.29
시스템 콜 목록  (0) 2011.09.29
시스템콜 과 라이브러리 함수  (0) 2011.09.29
by 민트앤라떼 2011. 9. 29. 18:15