Ich suche nach einem Dienstprogramm, das sich genauso verhält wie which
, aber um gemeinsam genutzte Bibliotheken (* .so) in den in $ LD_LIBRARY_PATH definierten Verzeichnissen nachzuschlagen.
quelle
Ich suche nach einem Dienstprogramm, das sich genauso verhält wie which
, aber um gemeinsam genutzte Bibliotheken (* .so) in den in $ LD_LIBRARY_PATH definierten Verzeichnissen nachzuschlagen.
Wenn Sie eine ausführbare Datei haben und sehen möchten, wo sie Bibliotheken aufnimmt, führen Sie sie aus
ldd /path/to/executable
Dies berücksichtigt Bibliotheken im Standardsuchpfad sowie Bibliotheken im Pfad dieser ausführbaren Datei, falls vorhanden.
Unter Linux werden Pfade zu Systembibliotheken aus Effizienzgründen zwischengespeichert. /sbin/ldconfig -p
Zeigt den Inhalt des Caches an (in dem er gespeichert ist /etc/ld.so.cache
). Hier ist ein Skript, das die Speicherorte einer Bibliothek anzeigt:
#!/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}'
Wenn Ihre Bibliotheken ordnungsgemäß zwischengespeichert sind, sollten Sie in der Lage sein, sie zu finden über:
ldconfig -p|grep "yourlibrary"
Wenn Sie nach einer Bibliothek suchen, die mit Ihrer Distribution geliefert wurde, können Sie die Distributionsmethode verwenden, um nach Dateien in Paketen zu suchen.
Dadurch werden auch RPMs ausgegeben, die nicht installiert sind, aber Teil Ihrer aktiven Installationsquellen sind.
Wenn Sie nach einem Dienstprogramm suchen, das wie gcc
das -lLIBNAME
Flag von ' funktioniert und nach einer aufgerufenen Datei sucht, können libLIBNAME.so
Sie wahrscheinlich ein kleines Skript verwenden, das ungefähr so funktioniert:
#!/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 ]