Instalando bibliotecas e arquivos de cabeçalho no Ubuntu Linux para desenvolvimento em C / C ++

5

Eu tenho que admitir que me sinto completamente perdido a cada vez que tenho que preencher as dependências de algum código C ou C ++. Atualmente, estou em Ubuntu 9.10 (Karmic Koala), mas eu me lembro do mesmo sensação de desamparo do Windows.

Eu realmente acho que eu entendo C, C ++, bibliotecas estáticas e dinâmicas, arquivos de cabeçalho e links, assim como o gerenciador de pacotes "aptitude", mas quando se trata da parte prática, eu não tenho absolutamente nenhuma idéia do que Faz. Mesmo que eu consiga de alguma forma, eu realmente não sei como cheguei lá e não aprendi nada com isso.

Por exemplo, hoje eu queria usar o código que diz que "Ele usa glib2, curl e openssl" . No final, eu descobri que curl e openssl já estavam instalados, mas eu precisava instalar libcurl3-dev através do meu gerenciador de pacotes, que também exigia (e instalava) libcurl4-openssl-dev para que eu não tivesse se preocupar com o OpenSSL. Mas eu tive que escolher esses nomes de pacotes de 67 alternativas que soam similares. E glib , por outro lado, teve que ser baixado e construído manualmente, já que não havia nenhum pacote correspondente.

Demorei várias horas para descobrir isso, e não é a primeira vez. Então, minha pergunta é realmente:

Quando tenho uma descrição vaga das dependências:

  • Como descubro quais delas já estão instaladas?
  • Como descubro quais deles podem ser preenchidos com a instalação de pacotes?
  • Como sei os nomes exatos desses pacotes?
  • Se um pacote tiver que ser construído a partir do código-fonte, como posso garantir que não me perderei nas dependências intermináveis dessa fonte e nas dependências dessas dependências ...?
  • Acho que também preciso vincular as bibliotecas aos meus arquivos de objetos. Se um único pacote vem com vários arquivos de biblioteca estáticos, como eu sei (sem tentativa e erro) qual deles linkar?
por Lena Schimmel 03.02.2010 / 03:21

2 respostas

3

Descobrir quais pacotes instalar para satisfazer dependências não é uma ciência exata. Mas há algumas dicas que podem ajudar você:

  • Quando você está trabalhando com dependências satisfatórias para compilar algo, você quase sempre quer o pacote que termina em -dev . Isso é curto para desenvolvimento. Por exemplo, o pacote openssl contém ferramentas de linha de comando e bibliotecas para trabalhar com criptografia. libssl-dev contém arquivos de cabeçalho e bibliotecas para o desenvolvimento do openssl.
  • Para procurar um pacote por palavra-chave usando apt, use apt-cache search . Por exemplo, eu realmente não sabia que o libssl-dev era o nome do pacote openssl dev. Eu achei que usando este comando: apt-cache search openssl | grep dev e depois indo com o que não parecia estar relacionado a outra linguagem / biblioteca.
  • Você pode ver quais pacotes você instalou usando dpkg -l , mas, em geral, basta encontrar o pacote que deseja e dizer ao apt para instalá-lo, se você já o tiver, então o apt informará. Outra boa dica é se você quiser saber qual pacote possui um arquivo, use dpkg -S /path/to/thefile
  • Se você acabar precisando criar um pacote a partir do código-fonte, não há uma maneira fácil de resolver a árvore de dependência. ./configure deve informar a você ou o arquivo README. Muitas vezes eles até mesmo nomeiam o pacote exato necessário.
  • Para descobrir o que vincular, normalmente isso está relacionado ao nome do pacote ou ao nome mais geral do que você deseja. Para nosso exemplo de libssl, você passaria apenas -lssl para gcc. Se você não sabe quais são as opções para -l , dê uma olhada em / lib / (apenas remova o "lib" da frente e o ".so ..." da parte de trás para obter o 'meio' que é passado para o gcc).
por 03.02.2010 / 03:56
2

Ninguém mencionou

aptitude build-dep

A entrada de página de manual é bastante abrangente.

    
por 17.02.2012 / 06:10