Supondo que eu queira testar se uma biblioteca está instalada e utilizável por um programa. Posso usar ldconfig -p | grep mylib
para descobrir se ele está instalado no sistema. mas e se a biblioteca for conhecida apenas por meio de configuração LD_LIBRARY_PATH
?
Nesse caso, o programa poderá encontrar a biblioteca, mas ldconfig
não o encontrará. Como posso verificar se a biblioteca está no caminho combinado do vinculador?
Acrescentarei que estou procurando uma solução que funcione mesmo que eu não tenha realmente o programa em mãos (por exemplo, o programa ainda não foi compilado), só quero saber que existe uma certa biblioteca em ld
' s caminhos.
linux
dynamic-linking
ld
nbubis
fonte
fonte
ldd <binary>
para verificar se todas as bibliotecas vinculadas estão no caminho. Talvez haja uma maneira mais elegante.ldd
serve exatamente a esse propósito.LIBRARY_PATH
a variável de ambiente que é procurada, por exemplo, pelogcc
compilador. ALIBRARY_PATH
variável de ambiente também possui uma lista de diretórios separada por dois pontos.Respostas:
ldconfig
pode listar todas as bibliotecas às quais 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ê não for um usuário root). NÃO leva em conta as bibliotecas em LD_LIBRARY_PATH (ao contrário do que este post dizia antes da edição), mas você pode passar bibliotecas adicionais para a linha de comando usando a linha abaixo:fonte
ldconfig
não é portátil, uma vez que só se aplica a implementações que são baseadas nas SunOS-4,0a.out
vinculador dinâmico base de 1987./sbin/ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH)
não exagerar no meu gosto.ldconfig
em um contrato com a AT&T, pois o cache do vinculador era muito sensível a erros. Sun acrescentou mais tardethe tree stooges
:moe
,lari
ecrle
como programas auxiliares para a gestão ELF.Substitua globalmente (espaço) por
:
LD_LIBRARY_PATHfonte
Você pode compilar um programa de teste simples com o gcc e vincular sua biblioteca. Depois, você pode verificar as bibliotecas usadas com o ldd. Eu uso algo como isto:
-Wl,--no-as-needed
impede que o vinculador descarte a biblioteca, porque nenhum símbolo da biblioteca é usado.fonte