수동으로 로드된 라이브러리에서 사전 연결을 사용하시겠습니까? (Java 네이티브 라이브러리와 유사)

수동으로 로드된 라이브러리에서 사전 연결을 사용하시겠습니까? (Java 네이티브 라이브러리와 유사)

내가 아는 한,프리링크실행 파일이 컴파일 타임에 필요하다고 선언한 동적 라이브러리(다음 명령을 사용하여 찾을 수 있는 라이브러리)에만 사용할 수 있습니다.LDD). 플러그인이나 (내 특별한 경우에는) Java 기본 라이브러리와 같이 실행 파일에 의해 수동으로 로드되는 동적 라이브러리는 포함되지 않는 것 같습니다. 이러한 유형의 라이브러리를 무시하도록 사전 연결을 강제하는 방법이 있습니까?

답변1

ELF 바이너리에서 실행 하면 prelink바이너리 자체와 해당 종속성만 확인합니다( ELF .dynamic및 ELF 섹션 .dynstr에서 참조 ).

다음을 사용할 수 있어야 합니다.

prelink --libs-only libone.so libtwo.so [...]

한 라이브러리가 다른 라이브러리에 의존하는 경우 동일한 명령줄에서 함께 지정해야 할 수도 있습니다(즉, 일반 링커 경로에 없는 경우).

하지만, 사전 연결의 중요한 부분은 로드할 최적의 위치를 ​​결정할 수 있다는 것입니다.모든처리 중인 라이브러리의 경우 라이브러리를 별도로 실행하면 사전 연결의 모든 이점을 얻지 못할 수 있습니다. 다음 두 가지 조건이 충족되는 한 이런 일은 발생하지 않습니다.

  • /etc/prelink.cache모든 라이브러리가 고유한 기반을 갖도록 공유 캐시( )를 사용합니다.
  • -m사전 연결 시 사용되지 않음(메모리 절약)

작업이 성공했는지 확인하세요.

prelink --print-cache

관련 정보