Je recherche un utilitaire qui se comporterait de la même manière que which
, mais pour rechercher des bibliothèques partagées (* .so) dans les répertoires définis dans $ LD_LIBRARY_PATH?
la source
Je recherche un utilitaire qui se comporterait de la même manière que which
, mais pour rechercher des bibliothèques partagées (* .so) dans les répertoires définis dans $ LD_LIBRARY_PATH?
Si vous avez un exécutable et que vous voulez voir où il récupère les bibliothèques, exécutez
ldd /path/to/executable
Cela compte pour les bibliothèques sur le chemin de recherche par défaut, ainsi que des bibliothèques de cet exécutable de rpath le cas échéant.
Sous Linux, les chemins d'accès aux bibliothèques système sont mis en cache pour plus d'efficacité. /sbin/ldconfig -p
affiche le contenu du cache (il est stocké dans /etc/ld.so.cache
). Voici un script qui montre le ou les emplacements d'une bibliothèque:
#!/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 vos bibliothèques sont correctement mises en cache, vous devriez pouvoir les trouver via:
ldconfig -p|grep "yourlibrary"
Si vous recherchez une bibliothèque fournie avec votre distribution, vous pouvez utiliser les moyens de distribution pour rechercher des fichiers dans des packages.
Cela produira également des rpms qui ne sont pas installés, mais qui font partie de vos sources d'installation actives.
Si vous recherchez un utilitaire qui fonctionnera comme gcc
le -lLIBNAME
drapeau de, qui recherche un fichier appelé, libLIBNAME.so
vous pouvez probablement utiliser un petit script qui fait quelque chose comme ceci:
#!/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 ]