como verificar se uma biblioteca está instalada?


167

No linux, como verifico se uma biblioteca está instalada ou não? (a partir da linha de comando, é claro).

No meu caso específico agora, quero verificar se o libjpeg está instalado.


Que distribuição você está usando?
raio

Respostas:


211

Para fazer isso de maneira independente da distribuição *, você pode usar o ldconfig com o grep, desta forma:

ldconfig -p | grep libjpeg

Se o libjpeg não estiver instalado, não haverá saída. Se estiver instalado, você receberá uma linha para cada versão disponível.

Substitua libjpeg por qualquer biblioteca desejada e você tem uma maneira genérica e independente de distribuição * de verificar a disponibilidade da biblioteca.

Se, por algum motivo, o caminho para o ldconfig não estiver definido, você pode tentar invocá-lo usando o caminho completo, normalmente /sbin/ldconfig.

** 99% das vezes *


2
Isso deve ser aceito como resposta. Ótimo!

11
Não é possível usar isso para verificar a versão dev (cabeçalhos) de uma biblioteca, certo?
andig 14/08/15

2
Você pode especificar 99% de vezes ? bash: ldconfig: command not foundno Debian x64 Jessie com xfce! Esta é a versão debian recomendada no site debian ...
Tomáš Zato

4
@ TomášZato: ldconfignão está disponível ( command not foundaparece) se você tentar executá-lo sem ser superusuário.
Gauthier

2
/sbin/ldconfig -pfunciona para mim sem precisar ser raiz.
Pedro Gimeno 9/11

34

Você pode verificar com o gerenciador de pacotes da sua distribuição (aptitude, yum, ...), mas como você não deu sua distribuição, não posso dar o comando certo.

Outra maneira pode ser executada gcc -ljpeg, se você obtiver 'ld: library não encontrado para -ljpeg', significa que o gcc não encontrou a biblioteca (mas isso não significa que não está instalado), se você tiver algo como 'Símbolos indefinidos : "_main", referenciado a partir de: ... 'significa que libjpeg foi encontrado.

locate libjpeg; ls /usr/lib/libjpeg*; ls /lib/libjpeg* Há outra maneira de descobrir se a lib está instalada no sistema

Há muitas outras maneiras de verificar se, se você nos fornecer mais contexto (por que você precisa verificar se o libjpeg está instalado), poderíamos fornecer a melhor solução para o seu caso específico.


Como encontrá-lo usando o aptitude?
BBK

17

Eu uso o utilitário whereis .

Amostra:

l1feh4ck3r@xxx:~$ whereis libjpeg
libjpeg: /usr/lib/libjpeg.so /usr/lib/libjpeg.a /usr/lib/libjpeg.la

11

Eu uso isso:

gcc -lpng

Quando a lib é instalada, ela produz:

undefined reference to 'main'

Quando a lib não está instalada:

cannot find -lpng

9

Para distribuição baseada em deb, você pode fazer

dpkg -s packagename

Ou, se você souber apenas o nome do arquivo, use

locate filename

O nome do arquivo é geralmente libsomething.so [.version].


11
O nome do arquivo também pode ser algo como "libsomething.a" para a versão estática.
raio

Acho dpkg -sutilidade limitada, porque deseja o nome do pacote real, que pode diferir sutil ou significativamente da própria biblioteca. Eu usodpkg -s|grep LIBRARY
Drew Stephens

2
@dinomite apt-file é seu amigo :)
raio

4

Nos sistemas baseados no Redhat, é possível usar o pkg-config para verificar se uma biblioteca está instalada ou não. Muitos binários rpm fazem as mesmas verificações antes de prosseguir com a instalação, para que possamos confiar razoavelmente em sua veracidade.

pkg-config --cflags jpeg

pkg-config --libs jpeg

pkg-config --cflags "jpeg >= 1.0.0" # for version check
pkg-config  --modversion jpeg | awk -F. '{ printf "0x%02X%02X%02X\n",$1,$2,$3 }' #version check


1

Você também pode tentar usar o dpkg para verificar se ele está instalado.

dpkg --list | grep [some_key_words_of_your_lib]

Além disso, no CentOS, você pode tentar isso.

rpm -qa [lib_name]


Nota:
Funcionará

@ALex_hha Sim, obrigado, isso deve ser enfatizado. Nos sistemas baseados no CentOS ou red hat, use em seu pkg-configlugar.
Scott Yang
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.