Estou procurando um utilitário que se comporte da mesma maneira que which
, mas procure bibliotecas compartilhadas (* .so) nos diretórios definidos em $ LD_LIBRARY_PATH?
fonte
Estou procurando um utilitário que se comporte da mesma maneira que which
, mas procure bibliotecas compartilhadas (* .so) nos diretórios definidos em $ LD_LIBRARY_PATH?
Se você tem um executável e deseja ver onde ele está pegando bibliotecas, execute
ldd /path/to/executable
Isso considerará as bibliotecas no caminho de pesquisa padrão, bem como as bibliotecas no rpath deste executável, se houver.
No Linux, os caminhos para as bibliotecas do sistema são armazenados em cache para maior eficiência. /sbin/ldconfig -p
exibe o conteúdo do cache (ele está armazenado /etc/ld.so.cache
). Aqui está um script que mostra os locais de uma 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}'
Se suas bibliotecas estiverem armazenadas em cache corretamente, você poderá encontrá-las através de:
ldconfig -p|grep "yourlibrary"
Se você procurar uma biblioteca que acompanha sua distribuição, poderá usar os meios de distribuição para procurar arquivos nos pacotes.
Isso também produzirá rpms que não estão instalados, mas fazem parte das fontes de instalação ativas.
Se você estiver procurando por um utilitário que funcione como gcc
o -lLIBNAME
sinalizador, que procura um arquivo chamado libLIBNAME.so
, provavelmente você pode usar um pequeno script que faça algo assim:
#!/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 ]