"which"는 공유 라이브러리와 동일합니다.

"which"는 공유 라이브러리와 동일합니다.

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

gccthen 이라는 이름의 파일을 찾는 ' 플래그 -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 ]

관련 정보