Compilação de Aplicações no Linux

Esse post que estou publicando é resultado da anotações que realizei durante o curso de Linux que fiz, por isso não tem nada muito detalhado, serve apenas para lembrar tópicos que foram abordados.

Compilação de programas diretos dos fontes:
Prós:
– permite configurar as opções não existentes nos pacotes originais da distro.
– as correções são implementadas primeiro nos fontes e só depois nos pacotes compilados.

Contras:
– pacote fica especifico para cada instalação apenas
– Perde-se as atualizações automáticas da distro.
– Pode implicar em perda de garantia do fabricante
– Exige instalação de dependências adicionais (“includes”, compilador, etc)

Procedimentos: baixar os fontes do software a ser compilado e descompactar em:
/usr/src – se depender dos fontes do kernel (ex: algum driver) : obrigatorio
/usr/local – caso não dependa dos fontes do kernel (maior parte das aplicações) – recomendado
usr – Unix System Resource

Para compilar o fonte baixado para o diretório /usr/local deve-se executar o script “configure” com as opções corretas indicadas na documentação.

O configure vai:
– checar as dependências (ex: pacotes -devel)
– checar as ferramentas (gcc)
– criar o arquivo makefile

Obs: algumas vezes não existe o configure. nestes casos basta executar o make pois já existe o makefile após usar make, execute make install

Erros mais comuns durante a compilação:
1) Ao executar o “configure” surge uma mensagem similar a: “erro version.h”.

causa: Falta algum pacote “-devel” (pacote de desenvolvimento) estes pacotes quase nunca estão instalados pois só são usados quando compilamos algum software.

Solução:
instale os pacotes “-devel” e reexecute o “configure”.

2) Ao reexecutar o configure surge a mensagem “nada a fazer” e o “configure” aborta de novo.
Causa: quando ocorre um erro, são gerados as arquivos config.log e config.cache
Solução: apague o .log e o .cache e reexecute o “configure”.

3) Ao executar o make, surge a mensagem “ERROR CC_MISMATCH”.
Causa: a versão do compilador “C” (GCC) é diferente da original.

Solução:
1) reinstalar o GCC com a versão correta;
2) exportar a variável abaixo
comando: export IGNORE_CC_MISMATCH=1
reexecute o make;

Carregando uma Biblioteca de Função.
1) Compilando todas as bibliotecas junto com a aplicação, criando um único “executável” – chamamos a isso: “Bibliotecas linkadas estaticamente”

Prós:
– aplicação fica independente do sistema onde será instalada

Contras:
– Aplicação fica maior.
– Perde-se as atualizações automáticas do sistema.

2) Compilando o executável apenas e carregando as bibliotecas do sistema dinamicamente. Chamamos a isso “Bibliotecas linkadas dinamicamente”

Prós:
-Aplicação fica menor
– As atualizações das bibliotecas agora, são automáticas, junto com o sistema.

Contras:
– Agora a aplicação passa a depender do sistema onde será instalada (“Dependências”);
/lib – bibliotecas do sistema
/usr/lib – bibliotecas gráficas
O comando “strings” lê a parte não binaria de um arquivo

O comando ld /usr/sbin/postfix exibe todas as bibliotecas que um executável precisa.

Quando um pacote adiciona uma biblioteca, essa fica listada no arquivo /etc/ld.so.conf após a ferramente “ldconfig” copia o path. dessa nova biblioteca para o cache de bibliotecas /etc/ld.so.cache

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *