sábado, 12 de dezembro de 2009

Como compilar programas a partir do código fonte

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.



.
Credito: Bruno Torres


.

.
.

╠╬╬╬╣«ŁÐŚ»╠╬╬╬╣


Gostou? Então copie esse post para seu Blog:

0 comentários: