Compilar Programas

A Compilação é um processo natural e vital em cada sistema operacional que começa na instalação do SO(Sistema Operacional) até sua descontinuação pelo seu desenvolvedor e/ou usuário.

Por que não é familiar?

A maioria de nos inicia com um Windows e aprendi a baixar programas já compilados ou com instaladores que não especificam suas operações internas, mas isso é um erro? Não, a responsabilidade de mostrar ao usuário oque você como desenvolvedor esta operando na maquina do usuário de modo que qualquer um entenda não e sua responsabilidade, mas convenhamos que isso poderia trazer uma nova visão de usuários e também permitir que usuários possam resolver problemas do software em relação ao seu computador.

Operações internas

Por mais magico que um compilador possa parecer o mesmo também é um programa que assim como todos os outros foi compilado.

Para ser mais especifico vou abortar as operações básicas de um compilador e no fim vamos compilar um gcc.

Leitura do código e sintaxe

Nessa etapa as linhas de código são lidas e a sintaxe da linguagem é aplicada , por exemplo abrir chaves( { ) deve ser seguido por um fechar chaves( } ) identificando um bloco de execução.

function Somar(val0, val1){
   alert(val0 + val1);

É e nessa etapa aonde entra os analisadores Léxico, sintático, semântico e o gerador de código.

Analisador Léxico responsável por organizar as palavras e símbolos reservados da linguagem como function.

Analisador Sintático se encarrega de verificar a sequencia de símbolos esta correta como +, -, *, / e etc, exemplo: val0 + val1 == 22 .

Por fim o analisador Semântico gera um mapa(Uma estrutura de dados) com a estrutura do programa e o gerador de código lé a estrutura passando da estrutura para uma linguagem de baixo nível seja ela C ou Assemble para por fim montar ou chamar um compilador que monte o programa uma descrição mais completa se encontra nesse link.

Compilando GCC

Em desenvolvimento consulte OSdev.org para mais informações

Primeiramente precisamos Obter o compilador GCC para isso execute:

~$ wget https://ftp.gnu.org/gnu/gcc/gcc-10.1.0/gcc-10.1.0.tar.gz

Depois de obter o arquivos gcc-10.1.0.tar.gz, vamos descompacta-lo usando o comando:

~$ tar -xf gcc-10.1.0.tar.gz

Agora, Vamos compilar e por fim rodar uma aplicação

~$ cd gcc-10.1.0/
~$ ./configure 
--target=i686-elf
--prefix="$HOME/build"
--enable-languages=c,c++
--without-headers

Opções utilizadas:

  • --target=i686-elf #Arquitetura

  • --prefix="$HOME/build" # Local da instalação

  • --enable-languages=c,c++ # Linguagens que serão suportadas

  • --without-headers # diz ao GCC para não confiar em nenhuma biblioteca C (padrão ou tempo de execução) presente já que sera um compilador cruzado

Agora vamos compilar e mover para o diretório de instalação, Alias isso pode demorar bastante.

make all-gcc
make all-target-libgcc
make install-gcc
make install-target-libgcc

Mas já podemos compilar um hellowWord.o ? Não, falta um conjunto de bibliotecas e ferramentas para lincar as bibliotecas e etc ao executável.

Vamos começar por compilar e implementar o Binutis para obter as ferramentas.

Em desenvolvimento

Last updated