블로그 이미지
progh2
지루한 것에서 벗어나 재미난 것 속으로 풍덩~☆

calendar

1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

Notice

Recent Post

Recent Comment

Archive

출처 - 비기닝 리눅스 프로그래밍 2nd

정적 라이브러리의 한 가지 단점은 많은 프로그램을 실행하고 각각이 모두 같은 라이브러리의 함수를 사용할 때, 메모리에 같은 함수의 많은 사본이 존재하게 되고, 결국 프로그램 파일 자체가 많은 함수의 사본을 가지게 된다는 문제가 있다. 이러한 문제를 해결한 것이 공유라이브러리의 개념이다.
공유라이브러리는 정적 라이브러리와 같은 장소에 저장되며 고유한 확장자를 가진다. 전형적인 리눅스 시스템에서 표준 C 공유 라이브러리는 /lib/libc.so.N 이다. 여기서 N은 주 버전을 뜻하며 현재 6이다.
프로그램이 공유 라이브러리를 사용할 때는 함수 코드 자체를 가지는 것이 아니라 실행 시에 유효한 공유 코드에 대한 참조를 가지도록 링크된다. 그 결과로 프로그램이 실행되고 메모리에 로드될 때 함수에 대한 참조가 이루어지며 필요에 따라서 메모리 내에 로드되는 공유 라이브러리에 대해서 함수 호출이 수행된다. 이러한 방법은 하나의 공유 라이브러리가 한번에 많은 어플리케이션에 의해 사용되고 디스크에 하나만 존재하면 된다. 추가적인 이득은 이 라이브러리가 의존하는 프로그램에 상관없이 독립적으로 갱신될 수 있다는 것이다.



ldd
동적 로더는 리눅스 시스템에서 공유 라이브러리를 로드하고 클라이언트 프로그램의 함수 참조를 해결하는 일을 다루는 프로그램이다. ld.so 나 ld-linux.so.2 등이 있으며 공유 라이브러리를 찾기 위해 검색하는 추가 위치를 /etc/ld.so.conf 에 설정하고 ldconfig로 갱신할 수 있다. ldd를 사용하여 프로그램에 필요한 공유 라이브러리를 확인할 수도 있다.
$ ldd program
manpage
http://man.kldp.org/wiki/FrontPage?action=GetManPage&lang=ko&man=ldd&sec=all

공유 라이브러리는 많은 점에서 마이크로소프트 윈도우즈에 사용되는 동적링크 라이브러리와 비슷하다. .so 라이브러리는 .DLL 파일에 대응하고 실행시에 요구되는 반면, .sa 라이브러리는 프로그램 실행 파일에 호함되는 .LIB 파일과 비슷하다.
posted by progh2