Szukam narzędzia, które zachowałoby się w taki sam sposób which
, ale by szukać bibliotek współdzielonych (* .so) w katalogach zdefiniowanych w $ LD_LIBRARY_PATH?
źródło
Szukam narzędzia, które zachowałoby się w taki sam sposób which
, ale by szukać bibliotek współdzielonych (* .so) w katalogach zdefiniowanych w $ LD_LIBRARY_PATH?
Jeśli masz plik wykonywalny i chcesz zobaczyć, gdzie pobiera biblioteki, uruchom
ldd /path/to/executable
Będzie to stanowić dla bibliotek w domyślnej ścieżce wyszukiwania, a także bibliotek w tym wykonywalnego rPath jeśli występują.
W systemie Linux ścieżki do bibliotek systemowych są buforowane w celu zwiększenia wydajności. /sbin/ldconfig -p
wyświetla zawartość pamięci podręcznej (jest przechowywana w /etc/ld.so.cache
). Oto skrypt, który pokazuje lokalizację biblioteki:
#!/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}'
Jeśli twoje biblioteki są odpowiednio buforowane, powinieneś być w stanie je znaleźć poprzez:
ldconfig -p|grep "yourlibrary"
Jeśli szukasz biblioteki dostarczonej z dystrybucją, możesz skorzystać ze środków dystrybucji do wyszukiwania plików w pakietach.
Spowoduje to również wyświetlenie rpms, które nie są zainstalowane, ale są częścią aktywnych źródeł instalacji.
Jeśli szukasz narzędzia, które będą działać jak gcc
„s -lLIBNAME
flagi, która szuka pliku o nazwie libLIBNAME.so
następnie prawdopodobnie można użyć trochę skrypt, który robi coś takiego:
#!/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 ]