tudo o que deseja saber sobre o GCC

Note a partir da saída acima do ficheiro pré-processado que, uma vez que o nosso programa solicitou o stdio.cabeçalho h ser incluído em nossa fonte que, por sua vez, solicitou um monte de outros arquivos de cabeçalho.

Compilation

The next step is to take the Preprocessed file as input, compile it and produce an intermediate compiled output. O arquivo de saída para esta etapa produz o código de montagem que é dependente da máquina.

usando o “-S” bandeira ” com o gcc que pode converter o processado C o código-fonte em linguagem assembly sem criar um ficheiro de objecto:

$ gcc -S HelloWorld.i -o HelloWorld.s

Arquivo compilado

Embora eu não estou muito em nível de assembly de programação, mas uma olhada rápida conclui que este conjunto de nível de saída é em alguma forma de instruções que o montador pode compreender e convertê-lo em máquina de nível de idioma.

montagem

como todos sabemos, as máquinas podem entender apenas a linguagem binária, então agora precisamos de um montador que converte o código de montagem em “HelloWorld.ficheiro c ” em código binário.

ASSEMBLER foi uma das primeiras ferramentas de software desenvolvidas após a invenção do computador digital.

se houver chamadas para funções externas no código de montagem, O Montador deixa os endereços das funções externas indefinidos, a serem preenchidos posteriormente pelo Linker.

a montadora pode ser invocada como mostrado abaixo. Utilizando o “-c” bandeira no gcc que pode converter o código assembly para o código de nível de máquina:

$ gcc -c HelloWorld.c -o HelloWorld.o

HelloWorld.o

a única coisa que podemos explicar olhando para o HelloWorld.o file é sobre o elfo string na primeira linha. ELF significa executável e formato linkável.

um ficheiro objecto e um ficheiro executável vêm em vários formatos, como o ELF (executável e formato de ligação) e o COFF (Common Object-File Format). Por exemplo, ELF é usado em sistemas Linux, enquanto COFF é usado em sistemas Windows.

este é um formato relativamente novo para arquivos de objetos de nível de máquina e executável que são produzidos pelo gcc. Antes disso, um formato conhecido como a. out foi usado. ELF é dito ser um formato mais sofisticado do que a. out (podemos cavar mais fundo no formato ELF em algum outro artigo futuro).

se compilar o seu código sem indicar o nome do ficheiro de saída, o ficheiro de saída produzido tem o nome ‘a. out’, mas o formato agora mudou para ELF. É apenas que o nome do arquivo executável padrão permanece o mesmo.

Linking

esta é a fase final em que toda a ligação das chamadas de funções com as suas definições são feitas. Linker sabe onde todas essas funções são implementadas (o Assembler deixou o endereço de todas as funções externas a serem chamadas). Até este estágio o GCC não sabe sobre a função como printf() .O Assembler teria deixado o endereço das funções a serem chamadas e Linker faz o processo final de preencher esses endereços com as definições reais. O linker também faz algumas tarefas adicionais para nós. Ele combina nosso programa com algumas rotinas padrão que são necessárias para fazer nosso programa funcionar. Então o tamanho final do executável é muito mais do que o arquivo de entrada!

todo o processo de ligação é tratado pelo CCG e invocado da seguinte forma::

$ gcc -o Output HelloWorld.c

o comando acima executa o ficheiro “HelloWorld.c “e produz o ficheiro executável final “Output”.

listagem de todos os arquivos usando ls -l

Como você pode ver , ‘Saída’ arquivo, por padrão, um arquivo executável com permissões -rwxrwxr-x ,isso apenas significa que ele tem permissão de executável para todos os usuários(dono,grupo e outros). Se executar este ficheiro executável simplesmente escrevendo ‘./ Output ‘ você recebe a saída final do nosso Programa !

Saída do arquivo executável

Então agora a gente sabe como um programa em C é convertido em um arquivo executável . Vamos mergulhar um pouco mais fundo na programação C nos próximos artigos. Até lá, feliz aprendizagem! 🙂

You might also like

Deixe uma resposta

O seu endereço de email não será publicado.