Descobrir se a biblioteca está no caminho

9

Supondo que eu queira testar se uma biblioteca está instalada e utilizável por um programa. Eu posso usar ldconfig -p | grep mylib para descobrir se ele está instalado no sistema. mas e se a biblioteca só é conhecida através da configuração de LD_LIBRARY_PATH ?

Nesse caso, o programa pode encontrar a biblioteca, mas ldconfig não. Como posso verificar se a biblioteca está no caminho do vinculador combinado ?

Acrescentarei que estou procurando uma solução que funcione mesmo que eu não tenha o programa em mãos (por exemplo, o programa ainda não esteja compilado), apenas quero saber que uma certa biblioteca existe nos caminhos de ld .

    
por nbubis 10.05.2016 / 11:05

3 respostas

9

ldconfig pode listar todas as bibliotecas às quais ele tem acesso. Essas bibliotecas também são armazenadas em seu cache.

/sbin/ldconfig -v -N rastreará todos os caminhos usuais da biblioteca, listará todas as bibliotecas disponíveis, sem reconstruir o cache (o que não é possível se você for um usuário não raiz). Ele NÃO leva em conta bibliotecas em LD_LIBRARY_PATH (ao contrário do que este post disse antes de editar), mas você pode passar bibliotecas adicionais para a linha de comando usando a linha abaixo:

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
    
por 10.05.2016 / 11:46
1

Substitua globalmente (espaço) por : por LD_LIBRARY_PATH

/sbin/ldconfig -N -v $(sed 's/:/ /g' <<< $LD_LIBRARY_PATH)
    
por 14.12.2017 / 20:17
0

Você pode compilar um programa de teste simples com o gcc e vincular sua biblioteca. Então você pode verificar as bibliotecas usadas com o ldd. Eu uso algo assim:

echo "int main(){}" | gcc -Wl,--no-as-needed -lmylib /tmp/test.c && ldd a.out | grep mylib

-Wl,--no-as-needed impede que o vinculador descarte a biblioteca, porque nenhum símbolo da biblioteca é usado.

    
por 19.11.2018 / 17:08