Criando / Instalando software com dependências externas no linux

1

Esse tipo de coisa tende a acontecer comigo mais do que deveria. Muitas vezes, quando estou construindo a fonte de algum programa ou apenas instalando um programa que tem dependências externas que ainda não estão na minha máquina, acabo tendo que fazer inúmeras pesquisas no Google para descobrir qual biblioteca estou realmente perdendo.

Um exemplo recente é o MathGL, que quando eu tentei instalá-lo pela primeira vez, ele disse que estava faltando algumas dependências, mas não mencionou explicitamente que eu precisava do apt-get install libmgl-dev . Isso é apenas conhecimento comum? Não vi nenhuma menção a libmgl-dev em nenhum dos seus arquivos LEIAME ou INSTALL ou em seu site. Eu até fiz um grep em todo o diretório procurando por uma menção de libmgl-dev , e não encontrei nada. Depois de muita pesquisa no Google, consegui encontrá-lo em uma postagem do fórum que eu disse que era necessário.

Deve haver algo errado com a minha metodologia. Ao instalar qualquer coisa, existe uma maneira padrão de determinar quais dependências eu preciso primeiro? Muito obrigado!

    
por Matt Vaughan 20.02.2014 / 23:52

2 respostas

1

  1. Se a equipe de programação é incrível e / ou profissional ./configure lhe dirá o que está faltando, infelizmente este tipo de programação é a exceção e não a regra.

  2. ao executar um (eu esqueci a mensagem de erro exata), certo tipo de mensagem de erro ausente será exibido.

  3. Localizar dependências depende do idioma em questão. Talvez alguém tenha um jeito melhor, mas aqui está como eu faço. Na linguagem de programação C , há instruções < nome_do_arquivo.h > que indicam os arquivos de cabeçalho. Se você procurar nas pastas atuais pelo arquivo de cabeçalho e não puder encontrá-lo, há uma chance de fazer parte de outra biblioteca. Dependendo da distribuição, os arquivos de cabeçalhos padrão estão em locais diferentes. Em, o OpenSuSE / usr / include contém todos os arquivos de cabeçalhos para programas que já possuem -dev instalados. Se não estiver em nenhum dos dois locais, você provavelmente está perdendo uma biblioteca que precisa instalar.

Em perl, é o use Algo :: subfunção ; que indica que ele está chamando e módulo externo / biblioteca.

o php tem os indicadores include , include_once , exigir e require_once .

Outros idiomas possuem métodos diferentes.

    
por 21.02.2014 / 03:29
0

A maioria dos softwares incluirá uma lista das dependências necessárias, embora a lista talvez não seja necessariamente da forma mais conveniente para você localizá-los e instalá-los.

Para dar um exemplo arbitrário, suponha que você queira compilar o Gnumeric, o aplicativo de planilha. Você faz o download do código fonte, e olha no arquivo README, que tem uma seção

Requirements
------------

You need:               Debian package name
    glib        >= 2.28.0   libglib2.0-dev
    gtk+        >= 3.2.0    libgtk3.0-dev
    libgsf      >= 1.14.24  libgsf-1-dev
    libgoffice  >= 0.10.1   libgoffice-0-8-dev
    gnome-xml       >= 2.4.12   libxml2-dev
    pango       >= 1.24.0   libpango1.0-dev
    NOTE: gnome-xml is also known as libxml

Optionally:
    python      >= 2.0      python-dev
    pygobject   >= 3.0.0    python-gi-dev

    The GDA plugin, for accessing databases
    gda     >= 1.3.0    libgda2-dev
    libgnomedb  >= 1.3.0    libgnomedb2-dev

Currently disabled:
    guile       >= 1.5  (no maintainer)

Runtime suggestions:
    'yelp' for help

Agora, este é o melhor cenário, eles informam as bibliotecas necessárias e o pacote exato do Debian que você precisa instalar para obtê-las. Por exemplo, você apenas executaria

$sudo apt-get install libglib2.0-dev

para instalar a primeira dependência.

No entanto, a segunda coluna do "debian package name" não é tão comum na maioria dos pacotes de software. Em vez disso, eles terão apenas a primeira coluna "glib" e, possivelmente, um número de versão. Cabe a você corroborar a dependência nomeada "glib" com o nome do pacote debian (ou ubuntu, etc) "libglib2.0-dev". Geralmente, algumas pesquisas na web ou no fórum ajudam você a encontrar o nome do pacote.

Com alguma experiência, você notará padrões nos nomes dos pacotes que você precisa. Em geral, as bibliotecas são empacotadas com nomes libXXXX e, em geral, são separadas nos componentes de tempo de execução (libXXX) e nos arquivos de desenvolvimento necessários para compilar seu programa (libXXX-dev). Além disso, se você não conseguir encontrar o pacote certo por meio de uma simples pesquisa na Web, veja a mensagem de erro específica que você recebe ao tentar compilar. Se, por exemplo, um arquivo "glib.h" estiver faltando, você pode usar a pesquisa de pacotes da sua distribuição para encontrar pacotes contendo esse arquivo ou, mais geralmente, você pode procurar essas mensagens de erro na web para encontrar outras pessoas com o mesmo problema .

Cabe ao pacote a quantidade de informação que eles fornecem sobre as dependências necessárias, mas a técnica mais comum é listar o nome genérico da biblioteca necessária. A pessoa que compila o pacote é responsável por descobrir como instalar os arquivos de desenvolvimento dessa biblioteca na configuração específica do sistema.

Se você encontrar um software que não liste suas dependências de alguma forma, envie um relatório de bug e, enquanto isso, prepare-se para começar a ler algumas mensagens de erro.

    
por 21.02.2014 / 04:18