Como compilar programas a partir do código fonte

Muitas vezes o programa que queremos não tem um pacote pré-compilado. Nesse caso precisamos obter o código fonte e compilá-lo. Vamos aprender como.

A grande diferença ente software livre e de código aberto e softwares proprietários é que no caso dos softares livres e abertos podemos obter o código fonte do programa e compilá-lo da maneira que acharmos melhor.

A princípio pensamos que nunca vamos precisar compilar programas e que sempre vamos instalá-los a partir de pacotes binários mas, acredite, muitas vezes é mais interessante e até mesmo necessário compilar o programa, seja pela falta de um pacote binário, para ter a chance de otimizar o programa para necessidades específicas ou simplesmente por curiosidade.

Compilar programas no linux não é trivial mas também não chega a ser difícil. Vou tentar mostrar de maneira simples e explicativa as maneiras mais comuns de compilar programas no linux.

O primeiro passo é obter o código fonte do programa. Geralmente ele é encontrado no site do desenvolvedor, mas muitos projetos são hospedados em sites como o freshmeat.net e sourceforge.net. Uma busca no Google Linux também pode ajudar bastante.

A maioria dos programas para linux são escritos na linguagem C ou C++ e consistem de vários arquivos dispostos em diversos diretórios, por isso eles são encontrados comumente na forma de arquivos empacotados e compactados. As extensões mais comuns são .tar.gz e .tar.bz2, que significa empacotado com o tar e compactados com o gzip ou bzip2 respectivamente. O bzip2 tem se tornado mais comum a cada dia, pois resulta em arquivos muito menores.

Vamos usar para efeito de exemplificação um programa fictício chamado ‘meu programa 1.0′. Baixamos este programa nas duas formas de compactação, ou seja, ‘meuprograma-1.0.tar.gz’ e ‘meuprograma-1.0.tar.bz2′.

Vamos agora descompactá-lo:

A forma mais simples de fazer a descompactação é usando o tar com a opção de descompressão -x e indicando o formato gzip (-z) ou bzip2 (j).

[user@host] $ tar zxvf meuprograma-1.0.tar.gz

ou então

[user@host] $ tar jxvf meuprograma-1.0.tar.bz2

Note que não é necessário usar o hífem (-) antes das opções para o tar, use-o se quiser.

A partir daqui não fará nenhuma diferença se você baixou o arquivo .gz ou .bz2.

Descompactado o arquivo é criado um diretório, usualmente com o mesmo nome do arquivo (claro, sem a extensão). No nosso caso ‘meuprograma-1.0′.

Entre nesse diretório

[user@host] $ cd meuprograma-1.0

examine o conteúdo do diretório

[root@host] # ls -la

Provavelmente existem dois arquivos – README e INSTALL – que trazem informações genéricas sobre o pacote e informações sobre a instalação. É altamente recomendada a leitura desses arquivos, mas prepare-se para ler em inglês. Qualquer informação específica do programa que o torne diferente na maneira de instalar vai estar contida nestes arquivos, portanto leia-os

[user@host] $ less README

[user@host] $ less INSTALL

Terminando de ler, vamos agora para a parte interessante: a compilação.

Para compilar programas no linux você vai precisar do compilador C e C++ GCC (geralmente encontrado nas distribuições linux dividido em três pacotes: gcc, cpp e g++), do GNU Make e, algumas vezes do autoconf e automake.

O primeiro passo da compilação geralmente é rodar um script chamado configure. Este script, que é gerado pelo desenvolvedor do programa com o autoconf, examina o seu sistema na busca por bibliotecas e arquivos de configuração e executáveis necessários para a compilação do programa. Se tudo estiver OK ele gera um arquivo chamado Makefile, que será usado posteriormente pelo make. Se alguma dependência não for encontrada ele pára e mostra uma pequena mensagem de erro, indicando o que ocorreu ou qual arquivo estava faltando. Na maioria das vezes o configure executa sem problemas. Para executá-lo faça

[user@host] $ ./configure

O próximo passo é a compilação propriamente dita. Como você pode imaginar, não é necessário compilar um a um os arquivo de código fonte. A compilação é coordenada pelo make, que segue um roteiro definido no Makefile, compilando e gerando os arquivos binários pra você com o uso do gcc.

Para compilar, use

[user@host] $ make

Dependendo do tamanho do programa que você está compilando esse processo pode demorar bastante. Você vai ver muita saída de texto e provavelmente não vai entender nada do que está escrito. Não se preocupe.

Terminada a compilação – sem nenhum erro, é claro – é hora de instalar o programa.

Note que até agora usamos um usuário comum (não-root) para executar os comandos. É recomendável que se faça assim. Mas a instalação deve ser feita como root pois ele tem acesso de escrita em qualquer diretório. A não ser que você saiba o que está fazendo, mude para root antes de instalar o programa. Essa mudança de usuário é feita com o comando

[user@host] $ su

Digite a senha de root e o prompt será mudado para

[root@host] #

Agora use

[root@host] # make install

para instalar o programa. Note que a instalação também é feita através do make. O make não serve apenas para compilar programas, serve para otimizar tarefas que seguem passos bem definidos. A instalação, por exemplo, consiste em copiar os arquivos certos nos lugares certos com as permissões adequadas. O roteiro da instalação também é definido no Makefile.

Este roteiro simples, de 3 comandos

[user@host] $ ./configure

[user@host] $ make

[root@host] # make install

é praticamente um padrão e é usado na grande maioria dos programas. Mas pode ser que o seu programa tenha opções e comandos específicos. Para saber esses comandos o jeito é ler os arquivos README e INSTALL ou procurar ajuda em listas de discussão ou canais IRC.

Existem algumas opções comuns que podem ser usadas, principalmente no script ‘configure’. Geralmente é possível listá-las com

[user@host] $ ./configure --help

A mai usadas é –prefix, que diz onde o programa será instalado. Se você quiser que seu programa seja instalado em /usr por exemplo, use

[user@host] $ ./configure --prefix=/usr

Assim os arquivos serão divididos entre diversos diretórios logo abaixo de /usr (por exemplo: binários em /usr/bin).

Alguns programas, na verdade a maioria deles, incluem um atalho para a desinstalação, geralmente

[user@host] $ make uninstall

e um para limpar os arquivos gerados pela compilação anterior

[user@host] $ make clean

Você pode também optar por gerar um pacote binário a partir da sua compilação. Um programa útil para isso é o checkinstall. Falar sobre o checkinstall está fora do escopo deste artigo mas pode ser que em um artigo futuro eu aborde esse tema. Só devo dizer que sua utilização é simples e trivial.

24 Comentários sobre “Como compilar programas a partir do código fonte”

Faça um comentário

#1 | Bruno Torres

aaa


#2 | Airton

Que bom se todas as dicas e informações que os “cobrões” em Linux nos dessem fossem tão claras,objetivas,detalhadas e explicadas!


#3 | anisio carlos

Muito bom.Gostaria de ter lido esse artigo a uns dois anos atrás mais ou menos.


#4 | geison

Muito bom mano tirou um monte duvidas minhas

principalmente pq eu uso o linux a 1 semana


#5 | Roberto M. Mello

Amigo vc esta de parabens com o seu site me ajudou muito na minha conversão do win para o Linux hoje estou aprendendo o Debian a pouco mais de 01 mês, gaostaria de saber se vc tem uma dica de como fazer funcionar os sensores de temperatura fan e outros da MOBO estou usando o Superkaramba e os sensores não aparecem.


#6 | Elionai

Bruno, meus parabens… O site esta otimo, e esses artigos são bastante úteis para a comunidade Linux…


#7 | andre

pó, muito bom o artigo… go guardar e ler em casa… muito bão mesmo…


#8 | Pedro

Bruno, agradeço seu artigo. Está muito claro e simples, ficou somente uma dúvida. Qual o diretório que você indicaria para descompactar os arquivos? Essa resposta você poderia acrescentar ao seu artigo.


valeu
to aprendendo muito


#10 | Guilherme

Parabéns pelo artigo. Tem a linguagem bem clara e ajuda bastante aos iniciantes (como eu) a romper algumas barreiras nesse mundo desconhecido.


#11 | Edimar dos Santos Siqueira

este site socorre a quem está em aperto!!!


#12 | Raphael

Parabéns Bruno, seu artigo realmente tirou minhas duvidas quanto a instalação de programas… Agora
que eu sei para que serve tenho que aprender a gerar o ./Configure e o ./Makefile… valeu!


#13 | ADRIANO

Parabéns. Enfim encontrei um site realmente dedicado a quem esta comecando no linux. E disso que a gente precisa patra sair da ditadura da janela.
valeu.


#14 | BlaBla

Tipo, dependência não existe né Bruno? Assim realmente fica mais fácil instalar programas no Linux mesmo: http://brunotorres.net/instalar-programas-no-linux-e-mais-facil-que-no-windows . Artigo seu este foi uma mancha na sua carreira… já que você sabia muito bem o que estava omitindo ao escrever aquilo.


#15 | Edson

Nossa… a melhor explicação que já tive… entendi tudinho, até aquela parte em que o jacaré sobe na arvore ! Demais !!!
Esse tutorial me fez viver melhor. Até minha dor de dente melhorou depois que li. Muito bom mesmo…


#16 | joaquim

Olá o meu nome é joaquim, eu quero comessar a programar, mas não tenho material, quem quiser me ajudar com informaçoes, dicas ou até mesmo livros ou qualquer coisa relacionado a programação, seja pra me vender, emprestar ou dar. Desde de já eu agradeço.

OGRIGADO


Tudo de bom… Mas quando é que o mundo vai perceber que já é grande o número de usuários de LINUX…

Mais drivers, mais jogos, mais aplicativos… nem que sejam pagos…
eu compro, mas meu SO vai ser LINUX e pronto….


#18 | Vicente de Farias Barros

A clareza deste texto impressiona. Se todos os experts em linux transmitissem os seus conhecimentos com tal competência e didática os usuários linux já seriam em número muito maior. Parabéns.


#19 | jimmytryx

oi bruno parabens,migrei para o linux a um mes , e muito bom saver que tem boas pessoas como voce,prestes para ajudar


#20 | Felipe

Show de bola. Esse tipo de informação muito bem explicada é de grande ajuda para desgraçados em linux como eu. Valeu mesmo.


O vei vc é um santo
eu nao baxei um monte desses arquivos e queria instalar mas nao dava pq tinha q compilar ai vem vc e explica tudo
valew mesmo agora so no linux – feadaput@ do windows ta dando pau

viva o linux


#22 | kão

Minha Nossa Senhora, por que não achei isso há mais tempo?
Cara, que explicação perfeita!
Se algum dia você montar um curso de Linux tão detalhado quanto esta explicação, me chame, me avise por e-mail que eu vou e faço, nem que seja no inferno.
Se tem mais alguma coisa desse tipo, diga onde está, por favor, que eu vou atrás, ok?
Parabéns, abraço.


#23 | pedro

Achei um site onde códigos ficam disponíveis: wikiopencode.com


#24 | André Scafura Lamonte

Muito bom, principalmente para quem esta começando ingressar nesta plataforma… utilizei o artigo para instalar o Hbasic no Ubuntu… Parabéns pelo trabalho.


«

»

Deixe seu comentário