Compilando Programas


Comandos intermediários do GNU/Linux

Compilando programas

Pequena introdução

Um dos pontos centrais do mundo GNU/Linux está baseado nas quatro liberdades básicas proposta pela FSF – Free Software Foundation, sendo elas;

  1. liberdade de rodar o programa para qualquer proprósito
  2. liberdade de acesso ao código fonte
  3. liberdade de redistribuir cópias do software
  4. liberdade de melhorar o programa e distribuir essas melhorias
Para que essas quatro liberdades básicas sejam alcançadas é necessário que tenhamos acesso ao código fonte dos programas.

Configure
sempre vira junto com o código fonte, pois ele executara uma verificação em seu sistema a fim de verificar se ele dispõe de todos os componentes básicos para uma compilação bem sucedida.

Makefile
A makefile em geral é criada utilizando a ferramenta configure e o objetivo desta é automatizar os processos de compilação, verificação e instalação dos softwares.

Exemplo:

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

Entrei nesse diretório

[user@host] $ cd meuprograma-1.0

examinei 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

Irei agora para a parte interessante: a compilação.

Para compilar programas no linux eu irei 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 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, usei

[user@host] $ make

Dependendo do tamanho do programa esse processo pode demorar bastante. Ira aparecer muitas saídas de textos e provavelmente jamais entenderei o que está escrito.

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

Note que até agora irei usar 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.

[user@host] $ su

Digitei a senha de root e o prompt foi mudado para

[root@host] #

Agora usei

[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 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.

[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


1
Descomprimindo e desempacotando o código fonte

2

3
README e INSTALL

4

5
Agora irei executar ./configure e determinar quais parâmetros que poderei passar ao configure.

6

7
exeuntando o ./configure

8
executando o make e make INSTALL

9

10
após a compilação do programa, removerei o s arquivos binários e de objetos que foram criados durante a cmpilação