"Qual" equivalente para bibliotecas compartilhadas


9

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?

Respostas:


5

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 -pexibe 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}'

5

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.

  • zypper wp "* / library.so" (SLES e OpenSuSE)
  • O yum fornece "* / library.so" (RedHat e seus clones)

Isso também produzirá rpms que não estão instalados, mas fazem parte das fontes de instalação ativas.


3

Se você estiver procurando por um utilitário que funcione como gcco -lLIBNAMEsinalizador, 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 ]

11
Obrigado pelo script, mas estou realmente me perguntando se existe um utilitário "padrão" para isso.
rahmu
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.