------------------------------------------------------------------------------------------------
 정적 라이브러리
    장점
    컴파일 하는 경우 속도가 빠름
   단점
   사이즈가 큼
동적 라이브러리
  장점
   사이즈가 작음
   단점
   컴파일 하는 경우 속도가 느림
  바이너리를 배포할 때 컴파일 할 당시에 사용한 공유 라이브러리와 같은 메이저 버전을 가지고 공유 라이브러리가 있는 시스템에서만 동작 함
---------------------------------------------------------------------------------------------------------------
 공유 라이브러리의 추가 장점
 라이브러리 변경 시 정적 라이브러리는 컴파일한 모든 파일들을 바꾸어야 하지만 공유 라이브러리는 공유 라이브러리만 바꾸어 주면 된다.
 이유 : 공유 라이브러리는 실행 시 공유 라이브러리와 링크 되기 때문
---------------------------------------------------------------------------------------------------------------
오브젝트 만들기
 gcc -fPIC -c plus.c minus.c
-fPIC : cc1 컴파일러에게 위치(메모리)에 관계 없이 수행되는 코드로 컴파일 하라는 옵션
 파일이 어떻게 돌아갈지 모르기때문에
---------------------------------------------------------------------------------------------------------------
라이브러리 만들기 (인덱스 과정 불필요)
 gcc -shared -Wl,-soname,libmy.so.0 -o libmy.so.0.0.0 plus.o minus.o
-shared : shared object를 생성하라는 옵션
-Wl: -Wl옵션 뒤에 오는 옵션 들을 링커에게 바로 전달하라는 옵션
-soname,libmy.so.0 : 동적 링커에게 soname libmy.so.0와 같은 형식으로 바로 전달
---------------------------------------------------------------------------------------------------------------
라이브러리를 만든 후 libmystuff.so.0.0.0의 심볼릭 링크를 만들기
ln -s libmy.so.0.0.0 libmy.so.0   
     --> 동적 링크를 위한 파일
ln -s libmy.so.0.0.0 libmy.so      
     --> gcc 링크를 위한 파일
---------------------------------------------------------------------------------------------------------------
동적 링커(/lib/ld-linux.so.2)가 찾을 수 있도록 디렉토리 설정하기
/etc/ld.so.conf 파일을 열어 libmy.so.0.0.0 파일이 있는 디렉토리를 추가한다.
/etc/ld.so.conf에 지정된 디렉토리를 찾아 다니면서 새로운 심볼릭 링크를 만들고 동적 링커가 읽어 들이는 /etc/ld.so.cache 파일을 새로 갱신한다.
ldconfig
/usr/lib 디렉토리에 만든 라이브러리를 복사하면 위의 절차는 필요가 없다.
---------------------------------------------------------------------------------------------------------------
만든 라이브러리 사용하기 (.a와 .so가 둘 다 있으면 .so를 선택)
 gcc -o 16_9 16_9.c -lmy -L.


      리눅스  |  2007. 9. 6. 11:07



sokoban's Blog is powered by Daum & Tattertools