-
공유 라이브러리 관리Technique/LPIC 2019. 4. 18. 15:52반응형
라이브러리란 자주 사용되는 기능을 모아 다른 프로그램으로부터 이용 가능하도록 한 것이다. 말하자면 프로그램의 부품이다. 라이브러리에는 정적 라이브러리와 공유 라이브러리가 있다. 프로그램의 작성 시에 그 실행 파일 안에 포함되어 있는 라이브러리를 정적 라이브러리라 한다. 프로그램의 실행 시에 로드되어 복수의 프로그램 사이에서 공유되는 라이브러리를 공유 라이브러리라 한다.
Static과 Dynamic
C언어 등에는 연산이나 제어 등의 기본적인 기능 이외는 프로그램 본체로부터 라이브러리의 기능을 이용한다. 이것을 링크라 말한다. static( 정적 링크 )는 컴파일할 시점에 컴파일러가 라이브러리를 실행 파일 내에 포함 시킨다. 실행 파일 내에 라이브러리의 기능을 포함하고 있는 것은 자주 사용되는 라이브러리의 기능이 여러 실행 파일 안에 중복되어 들어가게 되는 것이다. 거기서 실행 파일에 라이브러리를 포함시키지 않고 실행 시에 라이브러리의 기능을 호출하는 방법이 Dynamic( 동적 링크 ) 이다.
다이나믹 링크에 따라 호출되는 라이브러리를 공유 라이브러리라 말한다. 공유 라이브러리는 libreadline.so.5와 같은 [lib~. so~]라는 이름이 붙여져 있다. 공유 라이브러리 파일은 보통 /lib 또는 /usr/lib 디렉터리에 배치되어 있다. 위의
디렉터리 이외에도 아키텍처에 따라서 /lib32나 /lib64와 같은 디렉터리도 사용된다필요한 공유 라이브러리의 확인
실행 파일이 필요로 하는 공유 라이브러리는 ldd 커맨드로 조사할 수 있다 다음의 예는 cat 커맨드가 필요로 하는 공유 라이브러리를 표시하고 있다.
ldd /bin/cat linux-vdso.so.1 => xxx libc.so.6 => /lib64/libc.so.6 xxxx /lib64/ld-linux-x86-64.so.2 xxxx
프로그램을 실행 시에 ld.so 링커 또는 로더가 실행 시에 링크하는 공유 라이브러리를 검색하여 필요한 라이브러리를 로드한다. /lib, /usr/lib 디렉터리 이외의 라이브러리도 검색하는 경우는 그 리스트를 /etc/ld.so.conf 파일에 기록해 둔다.
그러나 프로그램을 실행할 때마다 이것들의 디렉터리를 검색하는 것은 비효율적이기 때문이 실제로는 바이너리의 캐시 파일인 /etc/ld.so.cache가 참조된다. ldconfig 커맨드는 /etc/ld.so.conf 파일에 의하여 /etc/ld.so.cache를 재 탐색한다. 공유 라이브러리를 변경한 경우에는 ldconfig 커맨드를 실행하여 캐시를 갱신하는 필요가 있다.그 외의 디렉터리도 검색 대상에 추가하고 싶을 경우 환경 변수 LD_LIBRARY_PATH에 디렉터리 리스트를 기록한다. 다음의 예에는 /home/student/mylib 디렉터리를 LD_LIBRARY_PATH에 추가하고 있다.
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/home/student/mylib
ld.so 링커가 공유 라이브러리를 검색하는 순서는 환경 변수 LD_LIBRARY_PATH가 우선되어 다음의 캐시 파일인 /etc/ld.so.cache 가 되어 거기서부터 디렉터리의 패스인 /lib와 /usr/lib가 된다.
반응형'Technique > LPIC' 카테고리의 다른 글
RPM 패키지 관리 (0) 2019.04.23 Debian 패키지 관리 (0) 2019.04.18 부트로더 설치 (0) 2019.04.18 하드디스크의 레이아웃 설계 (0) 2019.04.18 SysVinit (0) 2019.04.16