오늘은 맑음

linux 공유 라이브러리 본문

Linux

linux 공유 라이브러리

자전거 타는 구구 2017. 12. 8. 15:12
반응형

공유 라이브러리

 : 프로그램이 시작할때 적재되는 라이브러리이다. 

확장자는 .so이며 빌드시 실행파일에 포함시키지 않는다. 

공유라이브러리들은 이름이 'lib'로 시작되고 '.so' 확장자를 갖는다. 또한 인터페이스가 바뀜에 따라 증가되는 기간과 버전넘버로 이루어진다.


모든 공유 라이브러리들은 'real name'이라고 불리는 실제 라이브러리 코드를 포함하는 파일을 가지고 있다. 'real name'은 불리는 이름에 기간,


공유 라이브러리를 이용하여 exe파일 만들기

func1.c : int형 a, b를 받아 a + b를 반환하는 함수

func2.c : char형을 포인터로 받아 출력하는 함수

func.h : func1.c와 func2.c 함수를 정의해준 헤더

tmain.c : func1.c와 func2.c를 호출해주는 main함수


Lib파일 생성 makefile

libfunc.so.1.0 : func1.o func2.o

gcc -shared -Wl,-soname,libfunc.so.1 -o libfunc.so.1.0 func1.o func2.o

sudo cp libfunc.so.1.0 /usr/local/lib

sudo ln -sf /usr/local/lib/libfunc.so.1.0 /usr/local/lib/libfunc.so.1

sudo ln -sf /usr/local/lib/libfunc.so.1 /usr/local/lib/libfunc.so

sudo ldconfig

func1.o : func1.c

gcc -fPIC -c func1.c

func2.o : func2.c 

gcc -fPIC -c func2.c

clean:

@rm -rf *.o libfunc.so.1.0


exe파일 생성 makefile

exe : tmain.c func1.o func2.o

gcc tmain.c -o exe -lfunc

clean:

rm -rf *.o exe


위의 두가지 makefile을 만들어 주고 각 각 make -f name 명령어를 수행시켜주면 libfunc.so.1.0파일과 exe파일이 만들어지게 된다. 

exe파일을 실행시키면 tmain.c에서 정의해준 대로 실행결과가 출력되게 된다.


 명령어

설명 

-fPIC 

프로세스의 가상 주소 공간 안의 다른 지역에 로드 될 수 있도록 코드를 컴파일

-Wl

 gcc에게 콤마로 부분된 다음 옵션을 링커에게 알려줌

-soname, libfunc.so.1 

라이브러리에 대한 soname을 고정

ldconfig

지정된 디렉토리를 찾아다니면서 발견된 각각의 동적 라이브러리에 대해 그 라이브러리의 soname에 의해서 불러지는 심볼릭 링크들을 만들어낸다. 위에 soname에 주어진 이름으로 새로운 심볼릭 링크를 만듦. 

 -shared

공유 라이브러리를 만드는 옵션 

ln : link의 줄임말로써 리눅스 파일시스템에 링크파일을 생성한다.

-s : 심볼릭링크파일 생성

-f : 대상 파일이 존재할 경우에 대상 파일을 지우고 링크파일을 생성

공유 라이브러리의 장점 : 빌드시 실행파일에 포함시키지 않기 때문에 디스크 공간을 아낄수 있고 버그가 존재할경우 공유 라이브러리만 재배포하면 문제를 수정이 가능하다. 또한 다른 프로세스가 함수를 사용하여야 할 때 이전 프로세스가 로딩한 내용을 서로 공유하기 때문에 메모리 사용량을 절약할 수 있다.


공유라이브러리의 단점 : 파일을 배포할 때 라이브러리를 함께 배포해야 사용이 가능하다


반응형

'Linux' 카테고리의 다른 글

vim 상하 좌우 분할  (0) 2019.10.18
[Linux] makefile 사용해서 compile하기  (0) 2019.03.13
linux 정적 라이브러리 사용  (0) 2019.03.12
[Linux] linux에서 gcc(c/c++) compile하기  (0) 2019.03.12
정적 라이브러리  (0) 2017.12.08
Comments