Ferramentas do usuário

Ferramentas do site


gcc_linux

Diferenças

Aqui você vê as diferenças entre duas revisões dessa página.


gcc_linux [2023/09/12 16:14] (atual) – criada - edição externa 127.0.0.1
Linha 1: Linha 1:
 +====== 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'')
 +
 +<code>
 +$ gcc hello.c –o hello
 +</code>
 +
 +Compila 2 programas (''prog1.c'' e ''prog2.c'') e cria o binário ''programa''.
 +<code>
 +$ gcc prog1.c prog2.c –oprograma
 +</code>
 +
 +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).
 +<code>
 +$ gcc fat.c –o fat –lm
 +</code>
 +
 +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 [[pre_compilacao|Pré-compilação]]).
 +<code>
 +$ gcc def.c –DPLATAFORMA=Linux –odef
 +</code>
 +
 +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.
 +<code>
 +$ gcc inc.c –I../includes –L../libs –lmylib –o../bin/inc 
 +</code>
 +
 +Compila o ''progr1.c'' e gera o binário ''progr1''. A opção **''–O''** é para otimização do código gerado.
 +<code>
 +$ gcc –O –oprogr1 progr1.c
 +</code>
 +
 +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:
 +
 +<code>
 +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
 +</code>
 +
 +Os comandos do arquivo ''Makefile'' acima, seriam equivalentes a aos seguintes comandos (se todos fossem digitados):
 +
 +<code>
 +$> 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
 +</code>
 +
 +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