ldd가 나열하지 않는 공유 라이브러리를 찾고 계십니까?

ldd가 나열하지 않는 공유 라이브러리를 찾고 계십니까?

필요한 공유 라이브러리(다른 스크립트는 사용되지 않은 라이브러리를 보고함)를 실행하고 가져오지만 ldd특정 항목(예: 표시되지 않는 프로젝트 부분 libnss_*)을 사용하는 스크립트가 있습니다. glibc이러한 유형의 종속성을 어떻게 찾을 수 있나요?

감사해요

답변1

간단히 말해서, 당신은 할 수 없습니다.

라이브러리 로드는 ldd가 감지하는 하드 코딩된 라이브러리 이름을 사용하여 프로그램 초기화 시 수행될 수 있습니다.

그러나 모든 프로그램은 런타임에 모든 라이브러리에서 기호를 로드할 수 있으며 해당 라이브러리의 이름도 런타임에 계산될 수 있습니다. 가장 확실한 사용 사례는 플러그인 시스템입니다.

따라서 라이브러리를 로드하는 사용 사례에서 프로그램을 실행하지 않고는 이를 알 수 있는 방법이 없습니다(예: 이미지 편집기가 있는 경우 실제로 시도하기 전에 jpeg 파일을 로드하기 위한 라이브러리를 로드하기로 결정할 수 있음). 파일).

런타임에 로드된 모든 라이브러리를 아는 것은 불가능한 문제이므로 패키징 스크립트(예: redhat/fedora용 rpm 패키지를 빌드하는 데 필요한 .spec 파일)에서는 패키저가 자동으로 감지할 수 없는 종속성을 수동으로 지정해야 합니다.

관련 정보