공유 라이브러리와 동등한 “어떤” 와 같은 방식으로 작동 which하지만 $

와 같은 방식으로 작동 which하지만 $ LD_LIBRARY_PATH에 정의 된 디렉토리에서 공유 라이브러리 (* .so)를 찾는 유틸리티를 찾고 있습니까?



답변

실행 파일이 있고 라이브러리를 어디에서 가져 오는지 확인하려면 다음을 실행하십시오.

ldd /path/to/executable

이것은이 실행의의 기본 검색 경로에 라이브러리뿐만 아니라 라이브러리를 차지한다 RPATH 있는 경우.

Linux에서는 효율성을 위해 시스템 라이브러리에 대한 경로가 캐시됩니다. /sbin/ldconfig -p캐시의 내용을 표시합니다 (에 저장 됨 /etc/ld.so.cache). 라이브러리의 위치를 ​​보여주는 스크립트는 다음과 같습니다.

#!/bin/sh
if [ -n "$LD_LIBRARY_PATH" ]; then
  set -f
  IFS=:
  for d in $LD_LIBRARY_PATH; do
    if [ -e "$d/$1" ]; then echo "$1"; fi
  done
fi
/sbin/ldconfig -p |
awk -v needle="$1" '$1 == needle {sub(/.* => /, ""); print}'


답변

라이브러리가 올바르게 캐시 된 경우 다음을 통해 찾을 수 있습니다.

ldconfig -p|grep "yourlibrary"

배포판과 함께 제공된 라이브러리를 검색하면 배포판을 사용하여 패키지 내에서 파일을 검색 할 수 있습니다.

  • zypper wp “* / library.so”(SLES 및 OpenSuSE)
  • yum은 “* / library.so”(RedHat 및 해당 클론)를 제공합니다

또한 설치되지 않았지만 활성 설치 소스의 일부인 rpm을 출력합니다.


답변

gcc-lLIBNAME플래그 처럼 작동하는 유틸리티를 찾고 있다면 , 파일을 libLIBNAME.so찾은 다음과 같은 작은 스크립트를 사용할 수 있습니다.

#!/bin/sh
ldpath="${LD_LIBRARY_PATH:-$(</etc/ld.so.conf)}"
notfound=1
for libdir in ${ldpath//:/ }; do
        (test -f "$libdir/lib${1}.so" && echo "$_") && notfound=0
done
[ "$notfound" -eq 0 ]


답변