Ferramentas do usuário

Ferramentas do site


gcc_linux

Tabela de conteúdos

Compilando no Linux

GCC

Compilar é transformar um arquivo legível para o homem (chamado de código-fonte, source file em inglês) para um arquivo legível para a máquina (binário, binary). Quem faz esse trabalho é o compilador.

O compilador C/C++ padrão no Linux é o gcc. Muitas distribuições vêm o gcc incluído. O Compilador gcc é um dos compiladores mais versáteis e avançados existentes. O gcc suporta todos os padrões modernos do C atualmente usados, como o padrão ANSI C, assim como muitas extensões específicas do próprio gcc. Utilizar o gcc é simples. Vejamos alguns exemplos:

Compila o programa hello.c e cria o binário hello (opção –o do gcc)

$ gcc hello.c –o hello

Compila 2 programas (prog1.c e prog2.c) e cria o binário programa.

$ gcc prog1.c prog2.c –oprograma

Compila o programa fat.c, gera o binário fat e indica para o compilador linkeditar a biblioteca matemática junto com binário (opção –l do gcc).

$ gcc fat.c –o fat –lm

Compila o programa def.c, gera o binário def e cria a diretiva PLATAFORMA (opção –D do gcc) com o valor Linux (veja o funcionamento em Pré-compilação).

$ gcc def.c –DPLATAFORMA=Linux –odef

Compila o programa inc.c, gera o binário inc. A opção –I indica o caminho para os includes (headers) do específicos do projeto e a opção –L indica o caminho das bibliotecas específicas do projeto.

$ gcc inc.c –I../includes –L../libs –lmylib –o../bin/inc 

Compila o progr1.c e gera o binário progr1. A opção –O é para otimização do código gerado.

$ gcc –O –oprogr1 progr1.c

O libc (glibc) é uma biblioteca usada por quase todos os programas do Linux; o libjpeg é usada em todos os programas que trabalham com o formato JPEG; e assim por diante. No sistema Linux essas bibliotecas são divididas em dois pacotes: um para ser usado por programas já compilados (glibc e libjpeg, por exemplo), e um para ser usado na compilação de programas que dependem dele (glibc-devel e libjpeg-devel, por exemplo). Portanto, para compilar programas mais complexos, será necessário ter esses dois pacotes instalados.

Makefiles

Se o programa é constituído por vários arquivos, e normalmente usam bibliotecas e header-files externos, será necessário compilar todos eles e juntá-los (link) corretamente. Para automatizar esse procedimento, usa-se o comando make. Esse comando lê um arquivo chamado Makefile, onde estará o roteiro necessário para a compilação do programa. O objetivo básico do make é permitir que seja construído um programa em pequenas etapas. Se muitos arquivos fontes compuserem o executável final, será possível alterar um arquivo e reconstruir o executável sem ter a necessidade de compilar os demais programas. Para tal, é necessário criar um arquivo chamado Makefile.

O make pode ser composto de várias linhas, cada um indicando como o executável deve ser construído. Normalmente, existe dependências entre as linhas, indicado a ordem de execução das linhas. A disposição das linhas (entradas) dentro do arquivo Makefile não importa, pois o make irá descobrir qual a ordem correta. O make exige alguns cuidados para a criação do arquivo:

  • Sempre colocar uma tabulação no começo de um comando, nunca espaços. Não deve ser utilizado uma tabulação antes de qualquer outra linha.
  • O símbolo # (sustenido, tralha, cerquilha ou jogo da velha) indica uma comentário na linha.
  • Uma barra invertida no final de uma linha, indica que ela irá prosseguir na próxima linha. Ótimo para comandos longos.

Vejamos um exemplo:

install: all
	mv manipconfig /usr/local
	mv delbinario /usr/local

all: manipconfig delbinario


manipconfig: cria.o altera.o exclui.o consulta.o editor.o \
manipula.o principal.o 
	gcc –L/home/laureano/libs –o cria.o altera.o exclui.o \
consulta.o editor.o manipula.o principal.o

delbinario: del.c main.c
	gcc –o del.o main.o

cria.o: cria.c
	gcc –c cria.c

altera.o: altera.o
	gcc –c altera.c

exclui.o: exclui.c
	gcc –c exclui.c

consulta.o: cosulta.c
	gcc –c consulta.c

editor.o: editor.c
	gcc –c editor.c

manipula.o: manipula.c
	gcc –c manipula.c

principal.o: principal.c
	gcc –c principal

del.o: del.c
	gcc –c del.c

main.o: main.c
	gcc –c main.c

Os comandos do arquivo Makefile acima, seriam equivalentes a aos seguintes comandos (se todos fossem digitados):

$> gcc –c main.c
$> gcc –c del.c
$> gcc –c principal
$> gcc –c manipula.c
$> gcc –c editor.c
$> gcc –c consulta.c
$> gcc –c exclui.c
$> gcc –c altera.c
$> gcc –c cria.c
$> gcc del.o main.o –o delbinario
$> gcc –L/home/laureano/libs cria.o altera.o exclui.o consulta.o editor.o manipula.o principal.o –o manipconfig
$> mv manipconfig /usr/local
$> mv delbinario /usr/local

Para maiores informações sobre a utilização e opções dos comandos gcc e make, veja o manual on-line (help) do sistema Linux.

gcc_linux.txt · Última modificação: 2023/09/12 16:14 por 127.0.0.1