Como obtenho uma lista de nomes de arquivos de bibliotecas compartilhadas no Linux?

6

Existe um GNU Linux embutido para obter uma lista dos nomes de arquivos de bibliotecas compartilhadas? Considerei analisar a saída de ldconfig -p . No entanto, não tenho certeza sobre a consistência na saída de sistema para sistema.

Eu já estou ciente de que eu poderia usar find , mas como o linker / loader tem um cache de bibliotecas e locais, parece mais eficiente usá-lo de alguma forma. Além disso, os caminhos que o linker / loader pesquisa são os únicos com os quais estou preocupado - ou seja, bibliotecas que foram processadas por ldconfig .

    
por ephsmith 16.07.2012 / 18:27

1 resposta

7

Se você quiser pegá-los todos, não há outra escolha a não ser percorrer todo o sistema de arquivos. ldconfig sabe apenas sobre as bibliotecas nos caminhos padrão e os caminhos extras para os quais está configurada para procurar (geralmente definidos em /etc/ld.so.conf* ). Os locais suspeitos usuais onde outras bibliotecas podem ser encontradas são $HOME e /opt , embora não haja limite, especialmente quando as pessoas criam aplicativos por conta própria.

Se você não confiar na saída de ldconfig -p , poderá analisar seu cache diretamente. É binário, mas usar strings remove todo o lixo (5 so / lib / matches):

strings -n5 /etc/ld.so.cache

No meu sistema, ambos fornecem os mesmos resultados, o que verifiquei com essa rapidez:

a=$(ldconfig -p | awk -F'> ' '{print $2}' | sort); # get them to the same format
b=$(strings -n5 /etc/ld.so.cache | sort -u); 
echo -e "$a\n$b\n$b" | sort | uniq -u

Que verificou se alguma biblioteca na lista ldconfig -p não foi mencionada no cache. Nada foi retornado.

    
por 16.07.2012 / 18:37