2013-05-23 1 views
0


저는 리눅스가 어떻게 그 상황에서 행동하는지 관심이 있습니다. enter image description here리눅스가 응용 프로그램에서 라이브러리를로드하는 방법

라이브러리 "A"가 응용 프로그램과 통계적으로 링크되어 있습니다. 그러나이 응용 프로그램은 동적 라이브러리 B에 의존하며 라이브러리 A에 의존합니다.
따라서 어떤 라이브러리 A가 동적 라이브러리 B를 사용합니까? 통계적으로 링크 된 라이브러리 A가 내 응용 프로그램에 있거나 추가 라이브러리 A를 다시로드합니다.
이러한 라이브러리의 버전이 다른 경우 중요합니다.
또한 나에 대한 몇 가지 기사를 제안 할 수 있습니다. 링커는 블랙 박스와 같습니다.

답변

1

동적 libB.so이 작성 될 때 동적으로 libA.so에, 연결한다 - 어떤 라이브러리 B libB.so는 정적 (더 나쁜, 그것은, 해당 라이브러리의 중복 전역 변수가있을 수 있습니다 libA.a를 연결 표시되지 않습니다 연결이 당신에게 줄 수 있도록 악몽).

실제로는 libA.a이 주 프로그램의 ELF 실행 파일에 없습니다. 모든 객체 파일이 아닌 일부 파일 만 에서 libA.a까지 실행 파일 (실제로 필요한 파일) 내에 정적으로 링크됩니다.

dynamic linkingELF의 책, 위키 백과, Drepper의 논문 How To Write Shared Libraries을 참조하십시오. ld.so(8), ldconfig(8), ldd(1), dlopen(3), mmap(2), proc(5) 매뉴얼 페이지를 참조하십시오. 모두 정적 및 동적 (심지어 유사하거나 다른 버전의) 동일한 라이브러리 연결하는 짧은 피할에서 ...

strace 사용하여 한 번 cat /proc/self/maps보십시오.

엄지 손가락의 규칙 : 항상 당신이 무엇을하는지 아는 경우를 제외하고, 동적을 연결하는 이유 ...