두 애플리케이션이 런타임에 로드된 라이브러리를 공유할 수 있습니까?

두 애플리케이션이 런타임에 로드된 라이브러리를 공유할 수 있습니까?

A1, A2라는 2개의 애플리케이션이 런타임에 애플리케이션에 로드되는 공유 객체(예: lib1)를 공유합니다. A1은 dlopen을 사용하여 lib1을 성공적으로 로드했습니다. 이제 A2는 라이브러리를 로드하려고 합니다. A2는 괜찮나요? (lib1이 A1 주소 공간에 로드되기 때문입니다.) A1이 RTLD_LOCAL을 사용하여 로드되면 어떻게 되나요? A2가 lib를 로드할 수 있나요?

답변1

물론이죠. ~에서도서관에 관한 Wikipedia 기사:

공유 라이브러리 또는 공유 객체는 실행 파일 및 기타 공유 객체 파일이 공유하도록 의도된 파일입니다.

즉, "공유"라고 불리는 이유는 여러 실행 파일이 이를 사용하기 때문입니다.

문서에서RTLD_LOCAL:

이 라이브러리에 정의된 기호는 이후에 로드된 라이브러리의 참조를 확인하는 데 사용할 수 없습니다.

플래그는 RTLD_LOCAL단순히 를 로드할 때 함수를 정의한 다음 로드하는 경우 로컬 로 로드 되기 때문에 from을 사용할 수 없음을 dlopen()나타 냅니다 .A1lib1f1()A1lib2f1()lib1

관련 정보