which
와 같은 방식으로 작동 하지만 $LD_LIBRARY_PATH에 정의된 디렉토리에서 공유 라이브러리(*.so)를 찾는 유틸리티를 찾고 있습니다 .
답변1
실행 파일이 있고 해당 실행 파일이 라이브러리를 가져오는 위치를 확인하려면 다음을 실행하세요.
ldd /path/to/executable
기본 검색 경로의 라이브러리와 이 실행 파일의 라이브러리를 고려합니다.길그렇다면.
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}'
답변2
라이브러리가 올바르게 캐시된 경우 다음을 통해 찾을 수 있습니다.
ldconfig -p|grep "yourlibrary"
배포판과 함께 제공되는 라이브러리를 검색할 경우 패키지에 포함된 파일을 검색하는 배포 방식을 이용할 수 있습니다.
- zypper wp "*/library.so"(SLES 및 OpenSuSE)
- yum은 "*/library.so"(RedHat 및 해당 복제본)를 제공합니다.
이는 설치되지 않았지만 활성 설치 소스의 일부인 rpm도 출력합니다.
답변3
gcc
then 이라는 이름의 파일을 찾는 ' 플래그 -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 ]