블로그는 나의 힘!
[ Programing ]/OS - Linux2010. 10. 30. 11:04
1. 정적 라이브러리 ( 파일 확장자 : *.a )
: 정적 라이브러리는 컴파일 할때 적용. 


유용한 루틴(함수)이 들어있는 파일 square.c과 factorial.c을 가정

   1) Object 코드 만들기
     $ gcc –c square.c factorial.c 

   2) 라이브러리 만들기
     $ ar r libstuff.a square.o factorial.o 

   3) 라이브러리 인덱스 만들기 
       라이브러리 자체에 루틴 정보를 추가하는 과정
         $ ranlib libstuff.a
       라이브러리 만들기 + 인덱스 만들기 통합 명령
         $ar rs libstuff.a square.o factorial.o 

   4) 각 루틴의 signature가 extern 형태로 선언된libstuff.h 만들기 

   5) 컴파일
     $gcc –I ../include –L../lib –o wibble wibble.c–lstuff –lm
     -lstuff : 지금 만든 library 링크 (순서가 앞에 있으므로 이곳의 것이 불림)
     -lm : 표준 수학 library 링크

   라이브러리와 헤더파일에 대한 이해를 도와주었다.

 

2.  공유 라이브러리 ( 파일 확장자 :  *.so )
: 공유(동적) 라이브러리는 개발 과정이 용이 하고 라이브러리 변경시 재컴파일 불필요.
  하나 이상의 프로세스에서 사용시 메모리 양과 실행 파일 크리 줄여줌.

 
생성 절차

   재배치코드 생성
     -fpic, -fPIC : 공유를 위한 위치 독립적 생성
     $gcc –c –fpic square.c factorial.c

   공유라이브러리 생성 (인덱스 과정 불필요) 
     $gcc –shared –o libstuff.so square.o factorial.o 사용 

   정적인 경우와 동일 (.a와 .so가 둘 다 있으면 .so를 선택 수행) 
     $gcc –I../include –L../lib –o wibble wibble.c –lstuff –lm 

   꼭 정적인 라이브러리를 링크 하고자 할 때
     $gcc –I../include _L../lib –o wibble wibble.c libstuff.a –lm
     ldd 명령: 실행 프로그램이 사용하는 공유 라이브러리 나열



3. 그 외 추가적 명령어

라이브러리 갱신 
  # ldconfig
 
프로세스 링크된 라이브러리 보기
  > ldd [컴파일 된 프로세스]
  ex) > ldd mem_rga
 
라이브러리 모여 있는 곳
  > cd usr/local/lib

라이브러리 경로 설정
  # vi /etc/ld.so.conf
  include /etc/ld.so.conf.d/*.conf  

  ( /etc/ld.so.conf.d/의 모든 conf를 include )



참고 사이트 : http://nunorock.egloos.com/977997
Posted by Mister_Q