Como verificar se uma biblioteca compartilhada está instalada?

14

Minha pergunta se origina do meu problema em iniciar o ffmpeg. Eu instalei o ffmpeg e ele é exibido como instalado:

whereis ffmpeg 
ffmpeg: /usr/bin/ffmpeg /usr/bin/X11/ffmpeg /usr/share/ffmpeg /usr/share/man/man1/ffmpeg.1.gz

Mais tarde, descobri que alguns programas dependem de bibliotecas que não vêm com a instalação em si, então verifiquei com o comando ldd o que está faltando:

# ldd /usr/bin/ffmpeg
    linux-vdso.so.1 =>  (0x00007fff71fe9000)
    libavfilter.so.0 => not found
    libpostproc.so.51 => not found
    libswscale.so.0 => not found
    libavdevice.so.52 => not found
    libavformat.so.52 => not found
    libavcodec.so.52 => not found
    libavutil.so.49 => not found
    libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007f5f20bdf000)
    libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f5f209c0000)
    libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5f205fb000)
    /lib64/ld-linux-x86-64.so.2 (0x00007f5f20f09000)

Como se vê, meu ffmpeg é cortado de 7 bibliotecas também funciona. Primeiro pensei que cada uma dessas bibliotecas deveria ser instalada, mas do que eu imaginava, que algumas ou todas podem estar instaladas, mas sua localização é desconhecida pelo ffmpeg. Eu li que /etc/ld.so.conf e /etc/ld.so.cache contêm os caminhos para as bibliotecas, mas fiquei confuso, porque havia apenas uma linha

/etc/ld.so.conf
 cat /etc/ld.so.conf
include /etc/ld.so.conf.d/*.conf

mas muito tempo /etc/ld.so.cache.

Agora estou em um ponto em que me sinto perdido em como investigar mais. Pode ser um próximo passo útil para descobrir, como posso determinar se uma determinada biblioteca está realmente instalada, mesmo que seu local seja desconhecido para ffmpeg.

---------Output---of----apt-cache-policy-----request---------
apt-cache policy
Package files:
 100 /var/lib/dpkg/status
     release a=now
 500 http://archive.canonical.com/ubuntu/ trusty/partner Translation-en
 500 http://archive.canonical.com/ubuntu/ trusty/partner i386 Packages
     release v=14.04,o=Canonical,a=trusty,n=trusty,l=Partner archive,c=partner
     origin archive.canonical.com
 500 http://archive.canonical.com/ubuntu/ trusty/partner amd64 Packages
     release v=14.04,o=Canonical,a=trusty,n=trusty,l=Partner archive,c=partner
     origin archive.canonical.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/universe Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/restricted Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/multiverse Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/main Translation-en
 500 http://security.ubuntu.com/ubuntu/ trusty-security/multiverse i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=multiverse
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/universe i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=universe
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/restricted i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=restricted
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/main i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=main
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/multiverse amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=multiverse
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/universe amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=universe
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/restricted amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=restricted
     origin security.ubuntu.com
 500 http://security.ubuntu.com/ubuntu/ trusty-security/main amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-security,n=trusty,l=Ubuntu,c=main
     origin security.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/restricted Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/restricted i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main i386 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/multiverse amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/universe amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/restricted amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty-updates/main amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty-updates,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/universe Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/restricted Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/multiverse Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/main Translation-en
 500 http://archive.ubuntu.com/ubuntu/ trusty/multiverse i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/universe i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/restricted i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/main i386 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/multiverse amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=multiverse
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/universe amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=universe
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/restricted amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=restricted
     origin archive.ubuntu.com
 500 http://archive.ubuntu.com/ubuntu/ trusty/main amd64 Packages
     release v=14.04,o=Ubuntu,a=trusty,n=trusty,l=Ubuntu,c=main
     origin archive.ubuntu.com
 700 http://extra.linuxmint.com/ rebecca/main i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin extra.linuxmint.com
 700 http://extra.linuxmint.com/ rebecca/main amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin extra.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/import i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=import
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/upstream i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=upstream
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/main i386 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/import amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=import
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/upstream amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=upstream
     origin packages.linuxmint.com
 700 http://packages.linuxmint.com/ rebecca/main amd64 Packages
     release v=17.1,o=linuxmint,a=rebecca,n=rebecca,l=linuxmint,c=main
     origin packages.linuxmint.com
Pinned packages:
Abdul Al Hazred
fonte
Qual é a sua distribuição / SO? Existe algum motivo para você não estar usando o ffmpeg da sua distribuição?
Faheem Mitha
Eu uso o codinome mint do Linux Rebecca, o ffmpeg ainda não estava instalado na minha distribuição. Quando tentei instalá-lo com "apt-get install ffmpeg", não havia ffmpeg (apenas a palavra-chave em outros programas), adicionei um repositório em que foi incluído e poderia instalá-lo, mas depois que "ldd / usr / bin / ffmpeg" descobri que o ffmpeg estava faltando algumas bibliotecas, tentei instalar essas bibliotecas digitando seus nomes no apt-get, mas elas não puderam ser encontradas dessa maneira.
Abdul Al Hazred
Apenas dizendo, ffmpeg pode ser uma verdadeira dor de cabeça para instalar. Pode ser melhor usar uma instalação estática do git. Aqui está um que foi criado por uma alma caridosa para salvá-lo de dores de cabeça: johnvansickle.com/ffmpeg
Baazigar
Ajudaria se você nos dissesse de qual repositório você o instalou. :-) Além disso, você pode colar a saída da apt-get -f installsua pergunta, por favor? Nota: O ubuntu é baseado no Ubuntu 14.04, então você pode procurar lá se o ffmpeg não estiver incluído na sua distribuição.
Faheem Mitha
Não lembro o nome do repositório, mas era como o nome de um sobrenome que termina em filho, quando tentei procurá-lo em /etc/apt/sources.list /etc/apt/sources.list.d /
Abdul Al Hazred

Respostas:

5

Procure em / usr / lib e / usr / lib64 essas bibliotecas. Se você encontrar um dos quais o ffmpeg está ausente, faça um link simbólico para que ele exista no outro diretório.

Você também pode executar uma busca para 'libm.so.6' e ver onde está esse arquivo. Há uma boa chance de o ffmpeg procurar no mesmo diretório os que estão faltando. Vincule-os novamente lá quando os encontrar.

Se eles não existirem no seu servidor, instale o pacote que os inclui. Se eles estão incluídos no pacote ffmpeg, mas você não os vê, tente reinstalar o ffmpeg.

Baazigar
fonte
Portanto, se ele não existe em / usr / lib ou / usr / lib64, é definitivamente 100% não instalado?
Abdul Al Hazred
Se não existir em / usr / lib ou / usr / lib64, provavelmente não está instalado. A instalação do ffmpeg pode ser muito difícil, para que o ffmpeg funcione como as pessoas esperam, você geralmente precisa do ffmpeg e de outras coisas. Às vezes, numerosas "outras coisas". Eu sugiro usar uma construção estática, a menos que você prefira sofrer com a instalação manual, o que é compreensível.
quer
Eu não sei o que uma compilação estática é ....
Abdul Al Hazred
1
A construção estática significa que o ffmpeg e as ferramentas relacionadas foram compiladas para trabalharem juntas em apenas um diretório. Quando você usa o git para baixá-lo para o servidor, você tem tudo naquele local, para que não haja questão de bibliotecas ou qualquer coisa. Tudo vem em uma "caixa", por assim dizer, tudo o que você precisa fazer é definir suas diretrizes para apontar para ela. Aqui é onde você pode ler mais sobre ele e obtê-lo: johnvansickle.com/ffmpeg
Baazigar
27

Você pode usar:

ldconfig -p | grep libavfilter

Se não houver biblioteca de saída, não está instalado. Não tenho certeza se isso é 100% confiável.
Pelo menos na página de manual da ldconfigopção -p:

Imprima as listas de diretórios e bibliotecas candidatas armazenadas no cache atual.

taliezin
fonte
1

Use o comando file `which ffmpeg`para determinar se ffmpegé compilado para 64 bits ou 32 bits. Se for de 64 bits, procure as bibliotecas em /usr/lib64. Se for de 32 bits, procure as bibliotecas em /usr/lib. Se ffmpegestá vinculado estaticamente, então não importa ... ele não usará nenhuma biblioteca compartilhada e a saída do filemesmo dirá isso.

Não vincule simbolicamente bibliotecas entre /usr/libe /usr/lib64. Isso não ajudará você, porque um programa de 64 bits precisará de bibliotecas de 64 bits (encontradas em /usr/lib64) e um programa de 32 bits precisará de bibliotecas de 32 bits (encontradas em /usr/lib32).

Se as bibliotecas não existirem no seu servidor, instale o pacote que as fornece (certifique-se de escolher o pacote de 32 bits se ffmpeg for 32 bits, etc.).

gmorganVA
fonte