A1, A2라는 2개의 애플리케이션이 런타임에 애플리케이션에 로드되는 공유 객체(예: lib1)를 공유합니다. A1은 dlopen을 사용하여 lib1을 성공적으로 로드했습니다. 이제 A2는 라이브러리를 로드하려고 합니다. A2는 괜찮나요? (lib1이 A1 주소 공간에 로드되기 때문입니다.) A1이 RTLD_LOCAL을 사용하여 로드되면 어떻게 되나요? A2가 lib를 로드할 수 있나요?
답변1
물론이죠. ~에서도서관에 관한 Wikipedia 기사:
공유 라이브러리 또는 공유 객체는 실행 파일 및 기타 공유 객체 파일이 공유하도록 의도된 파일입니다.
즉, "공유"라고 불리는 이유는 여러 실행 파일이 이를 사용하기 때문입니다.
문서에서RTLD_LOCAL
:
이 라이브러리에 정의된 기호는 이후에 로드된 라이브러리의 참조를 확인하는 데 사용할 수 없습니다.
플래그는 RTLD_LOCAL
단순히 를 로드할 때 함수를 정의한 다음 로드하는 경우 로컬 로 로드 되기 때문에 from을 사용할 수 없음을 dlopen()
나타 냅니다 .A1
lib1
f1()
A1
lib2
f1()
lib1