와 같은 방식으로 작동 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 ]