"Quale" equivalente per le librerie condivise


9

Sto cercando un'utilità che si comporterebbe allo stesso modo which, ma per cercare le librerie condivise (* .so) nelle directory definite in $ LD_LIBRARY_PATH?

Risposte:


5

Se hai un eseguibile e vuoi vedere dove sta raccogliendo le librerie, esegui

ldd /path/to/executable

Questo rappresenterà le librerie sul percorso di ricerca predefinito e le librerie in questo eseguibile rPath se presente.

Su Linux, i percorsi delle librerie di sistema sono memorizzati nella cache per efficienza. /sbin/ldconfig -pvisualizza il contenuto della cache (è memorizzato in /etc/ld.so.cache). Ecco uno script che mostra le posizioni di una libreria:

#!/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}'

5

Se le tue librerie sono correttamente memorizzate nella cache, dovresti essere in grado di trovarlo tramite:

ldconfig -p|grep "yourlibrary"

Se cerchi una libreria fornita con la tua distribuzione, puoi utilizzare i mezzi di distribuzione per cercare file all'interno dei pacchetti.

  • zypper wp "* / library.so" (SLES e OpenSuSE)
  • yum fornisce "* / library.so" (RedHat e i suoi cloni)

Questo produrrà anche rpms che non sono installati, ma che fanno parte delle tue fonti di installazione attive.


3

Se stai cercando un'utilità che funzionerà come gccil -lLIBNAMEflag di, che cerca un file chiamato, libLIBNAME.soprobabilmente potresti usare un piccolo script che fa qualcosa del genere:

#!/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 ]

1
Grazie per la sceneggiatura, ma mi chiedo davvero se esiste un'utilità "standard" per questo.
Rahmu,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.