Capítulo 2. Código de Construção com GCC
Este capítulo descreve situações em que o código fonte deve ser transformado em código executável.
2.1. Relação entre as formas de código
Pré-requisitos
- Entendendo os conceitos de compilação e vinculação
Possíveis formas de código
Os idiomas C e C++ têm três formas de código:
Source code escrito na língua C ou C }, presente como arquivos de texto simples.
Os arquivos normalmente usam extensões como
.c
,.cc
,.cpp
,.h
,.hpp
,.i
,.inc
. Para uma lista completa das extensões suportadas e sua interpretação, consulte as páginas do manual do gcc:$ homem gcc
Object code, criado por compiling o código fonte com um compiler. Esta é uma forma intermediária.
Os arquivos de código objeto utilizam a extensão
.o
.Executable code, criado por linking código objeto com um linker.
Os arquivos executáveis de aplicativos Linux não utilizam nenhuma extensão de nome de arquivo. Os arquivos executáveis de objetos compartilhados (biblioteca) usam a extensão de nome de arquivo
.so
.
Também existem arquivos de biblioteca para ligação estática. Esta é uma variante do código do objeto que usa a extensão do nome do arquivo .a
. A vinculação estática não é recomendada. Veja Seção 3.2, “Ligação estática e dinâmica”.
Manuseio de formulários de código no GCC
A produção de código executável a partir do código fonte é realizada em duas etapas, que requerem aplicações ou ferramentas diferentes. O GCC pode ser usado como um driver inteligente tanto para compiladores quanto para linkers. Isto permite utilizar um único comando gcc
para qualquer uma das ações necessárias (compilação e link). GCC seleciona automaticamente as ações e sua seqüência:
- Os arquivos fonte são compilados para objetos de arquivos.
- Os arquivos objetos e bibliotecas estão ligados (incluindo as fontes compiladas anteriormente).
É possível executar o GCC para que ele execute somente a etapa 1, somente a etapa 2, ou ambas as etapas 1 e 2. Isto é determinado pelos tipos de entradas e tipo de saída(s) solicitada(s).
Como os projetos maiores requerem um sistema de construção que normalmente executa GCC separadamente para cada ação, é melhor considerar sempre a compilação e a ligação como duas ações distintas, mesmo que GCC possa executar ambas de uma só vez.