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?
fuente
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?
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 -p
muestra 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}'
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.
Esto también generará rpm que no están instaladas, pero que son parte de sus fuentes de instalación activas.
Si está buscando una utilidad que funcione como gcc
el -lLIBNAME
indicador de, que busca un archivo llamado, libLIBNAME.so
entonces 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 ]