"Cual" equivalente para bibliotecas compartidas


9

Estoy buscando una utilidad que se comporte de la misma manera que which, pero ¿buscar bibliotecas compartidas (* .so) en los directorios definidos en $ LD_LIBRARY_PATH?

Respuestas:


5

Si tiene un ejecutable y desea ver dónde está recogiendo bibliotecas, ejecute

ldd /path/to/executable

Esto tendrá en cuenta las bibliotecas en la ruta de búsqueda predeterminada, así como las bibliotecas en la ruta de este ejecutable, si corresponde.

En Linux, las rutas a las bibliotecas del sistema se almacenan en caché para mayor eficiencia. /sbin/ldconfig -pmuestra el contenido del caché (está almacenado en /etc/ld.so.cache). Aquí hay un script que muestra las ubicaciones de una biblioteca:

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

Si sus bibliotecas están correctamente almacenadas en caché, debería poder encontrarlas a través de:

ldconfig -p|grep "yourlibrary"

Si busca una biblioteca que viene con su distribución, puede utilizar los medios de distribución para buscar archivos dentro de los paquetes.

  • zypper wp "* / library.so" (SLES y OpenSuSE)
  • yum proporciona "* / library.so" (RedHat y sus clones)

Esto también generará rpm que no están instaladas, pero que son parte de sus fuentes de instalación activas.


3

Si está buscando una utilidad que funcione como gccel -lLIBNAMEindicador de, que busca un archivo llamado, libLIBNAME.soentonces probablemente podría usar un pequeño script que haga algo como esto:

#!/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
Gracias por el script, pero realmente me pregunto si hay una utilidad "estándar" para esto.
rahmu
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.