티스토리 뷰



정적 라이브러리와 공유 라이브러리



  1. 정적 라이브러리(Static Library)


  • 여러 프로그램에서 사용되는 함수를 포함하는 오브젝트 파일들을 ar명령을 이용하여 하나의 아카이브 파일로 모아놓은 것.


정적 라이브러리 생성


  • gcc를 이용하여 오브젝트 코드 생성.


  • ar 프로그램을 이용하여 라이브러리 파일(.a) 생성 (명령어 ar rv [.a] [.o])


  • 정적 라이브러리를 포함하여 컴파일 옵션 : gcc [.c] -o [프로그램명] [.a]


특징

  • 링커는 지정된 정적 라이브러리에서 해당 심볼을 정의하고 있는 오브젝트 파일의 사본을 추출해서 실행 파일 내에 포함시킴.


  • 정적 라이브러리를 이용하여 실행 파일을 생성하면 해당 실행 파일 내에 라이브러리 함수의 코드가 포함 됨.


  • 따라서 다른 시스템에서도 잘 동작함.


  • 각각의 실행 파일마다 똑같은 라이브러리 함수의 코드가 포함 되기 때문에 메모리상의 여러 곳에 존재하게 되므로 낭비가 됨.



  1. 공유 라이브러리


  • 여러 오브젝트 파일을 하나의 오브젝트 파일로 만들어 공유 할 수 있도록 한 것

  • 정적 라이브러리와 달리 실행 파일에 함수 코드가 포함되는 것이 아니라 실행 시 공유 라이브러리를 참조하는 방식

공유 라이브러리 생성


  • 함수를 .c 파일로 정의


  • gcc -c -fPIC [.c] // 독립적인 코드로 만들기 위해 gcc의 -fPIC 옵션을 이용하여 컴파일


  • gcc -shared -o [.so] [.o] // 공유 라이브러리 .so 파일 생성


  • /etc/Id.so.conf.d 디렉터리 안에 *.conf 란 파일명으로 파일을 만들고 그안에 자신이 만든 공유 라이브러리 파일의 전체 경로를 적음( include /etc/ld.so.conf.d/*.conf


  • Idconfig 명령을 이용하여 캐쉬를 갱신


특징

  • 실제 라이브러리 코드는 실행 파일에 포함되어 있지 않고 공유 라이브러리에만 존재

  • 따라서 실행 파일을 배포 할 때 실행 파일과 공유 라이브러리를 함께 배포해야함


Comments