"Welches" Äquivalent für gemeinsam genutzte Bibliotheken

9

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.

Rahmu
quelle

Antworten:

5

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 -pZeigt 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}'
Gilles 'SO - hör auf böse zu sein'
quelle
5

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.

  • zypper wp "* / library.so" (SLES und OpenSuSE)
  • yum bietet "* / library.so" (RedHat und seine Klone)

Dadurch werden auch RPMs ausgegeben, die nicht installiert sind, aber Teil Ihrer aktiven Installationsquellen sind.

Nils
quelle
3

Wenn Sie nach einem Dienstprogramm suchen, das wie gccdas -lLIBNAMEFlag von ' funktioniert und nach einer aufgerufenen Datei sucht, können libLIBNAME.soSie 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 ]
Amphetamachine
quelle
1
Vielen Dank für das Skript, aber ich frage mich wirklich, ob es dafür ein "Standard" -Dienstprogramm gibt.
Rahmu