Há um executável que quero instalar em um computador que não consigo recompilar que não foi construído como um pacote e quero fazer o download das bibliotecas necessárias para executá-las.
Abaixo está parte da saída da execução ldd
nele
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
libcairo.so.2 => /usr/lib/i386-linux-gnu/libcairo.so.2 (0xb6f64000)
libatk-1.0.so.0 => /usr/lib/i386-linux-gnu/libatk-1.0.so.0 (0xb6f43000)
libsqlite3.so.0 => /usr/lib/i386-linux-gnu/libsqlite3.so.0 (0xb6e9e000)
libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xb6cf4000)
/lib/ld-linux.so.2 (0xb786e000)
libxcb.so.1 => /usr/lib/i386-linux-gnu/libxcb.so.1 (0xb6cd3000)
libgio-2.0.so.0 => /usr/lib/i386-linux-gnu/libgio-2.0.so.0 (0xb6b7c000)
libm.so.6 => /lib/i386-linux-gnu/libm.so.6 (0xb6b4f000)
Existe uma ferramenta que possa usar essas informações para selecionar quais pacotes devem ser baixados ou, melhor ainda, extrair apenas as bibliotecas listadas e suas dependências, a fim de minimizar o uso do disco? O sistema está sendo executado em uma VM sem cabeça e o programa será exibido via VNC.
Embora eu suspeite que uma área de trabalho gráfica completa forneça a maioria das bibliotecas necessárias, desejo fazer o download apenas das bibliotecas necessárias, de suas dependências e do pacote X Windows suficiente para suportá-las.
fonte
Respostas:
Você não disse qual sistema operacional está usando, portanto, assumirei o Linux e utilizarei o Debian como exemplo. A resposta rápida para sua pergunta não é tanto quanto eu sei. Essa pode ser uma solução útil:
Isso analisará a
ldd
saída e executaráapt-cache
(substitua-a pelo equivalente ao seu sistema operacional) para procurar nos repositórios por pacotes cujo nome e descrição contenham a primeira parte do nome da biblioteca retornada porldd
.Isso não encontrará todos eles e fornecerá muitos resultados para alguns (como
libc
), mas pode ser útil.@FaheemMitha apontou que
apt-file
pode ser uma maneira melhor. Por exemplo:Isso retornará uma lista de nomes de pacotes que fornecem as bibliotecas vinculadas.
fonte
apt-file search
no arquivo real no lado direito da seta pode ser mais eficaz.apt-get install
todos eles e todos os que já estão instalados serão ignorados.A resposta do @ terdon é ótima, mas é ainda mais fácil fazer isso usando o
dpkg-query
diferente do queapt-file
é instalado por padrão nos sistemas Debian.Isso produz uma lista de pacotes.
fonte
Sua melhor aposta é encontrar um pacote que realmente suporte sua distribuição. Mas se isso não funcionar para você, conheço apenas uma outra maneira.
Execute o ldd como você possui e instale manualmente essas dependências.
Por exemplo
libpango-1.0.so.0 => /usr/lib/i386-linux-gnu/libpango-1.0.so.0 (0xb702f000)
Para mim, significaria instalar
apt-get install libpango:i386
e rezar para que a versão no Debian instável fosse boa o suficiente.Você precisaria passar por cada linha de ldd, Google, procurar em seus repositórios disponíveis e basicamente ter sorte. Em seguida, instale-os um por um. Até o programa realmente ser executado. Embora o ldd funcione apenas para programas "simples". Programas que chamam plugins ou que executam código arbitrário são uma questão diferente. Para aqueles que você precisará executar no console e corrigir as falhas / erros à medida que eles acontecem.
Dito isto, um único executável binário é terrivelmente difícil de manter. Você pode considerar usar outra coisa. Se sua distribuição estiver um pouco à frente, ou um pouco atrás do sistema que construiu esse executável, você nunca poderá fazê-la funcionar.
fonte