C Instalar no Linux

As caixas Experimente do guia compilam C no navegador, mas, para programar de verdade, você vai querer o compilador no seu computador. No Linux, isso é fácil: o gcc está a um comando de distância, e em muitas distribuições ele já vem instalado. Nesta aula você vai conferir se ele já está aí, instalar o gcc, o make e o gdb no Ubuntu, no Debian, no Fedora ou no Arch, e fazer o teste final com um programa em C23.

Você vai aprender
  • O que é um gerenciador de pacotes e por que ele facilita tudo.
  • Como descobrir se o gcc já está instalado.
  • Como instalar o kit build-essential (e o gdb) no Ubuntu e no Debian.
  • Os comandos equivalentes no Fedora (dnf), no Arch (pacman) e no openSUSE.
  • Como instalar o Clang, o compilador do editor do guia.
  • Como conferir a instalação com gcc --version, make --version e gdb --version, e testar o C23.

Esta aula é para quem usa Linux. No Windows ou no macOS, veja Instalar no Windows e macOS. As saídas de terminal foram produzidas na máquina da Ana, que usa Ubuntu 26.04. Os comandos que instalam de verdade não puderam ser rodados lá (a Ana já tinha tudo instalado), por isso, nesses pontos, a aula mostra a simulação que o próprio apt faz, e marca como ilustrativo o que não foi rodado.


A ideia: a loja de aplicativos do Linux

No celular, você não procura aplicativos em sites aleatórios: abre a loja, procura pelo nome e toca em "Instalar". A loja baixa o aplicativo, instala, e depois avisa quando há atualização. O Linux tem isso há muito mais tempo que os celulares: é o gerenciador de pacotes. Cada programa vem num pacote, e o gerenciador baixa os pacotes de um repositório oficial da sua distribuição, com tudo de que o programa precisa para funcionar (as dependências).

DistribuiçãoGerenciador de pacotes
Ubuntu, Debian, Linux Mint, Pop!_OSapt
Fedora, Red Hat, Rocky Linux, AlmaLinuxdnf
Arch, Manjaro, EndeavourOSpacman
openSUSEzypper

Para programar em C, você vai precisar de três ferramentas: o gcc (o compilador), o make (que automatiza a compilação de projetos com vários arquivos, aula Makefile) e o gdb (o depurador, que deixa você rodar o programa passo a passo, aula Depurar com gdb). E junto com o gcc vem uma peça escondida, mas essencial: os arquivos .h da biblioteca padrão, como o stdio.h.


1. O gcc já está instalado?

Em muitas distribuições, o compilador já vem instalado ou entra junto com outros programas. Antes de instalar, pergunte. Abra o terminal (no Ubuntu: Ctrl+Alt+T) e digite:

$ gcc --version
gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0                « está instalado: versão 15.2
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Se apareceu uma versão, o gcc já está aí. Se ela for 14 ou mais nova, você tem tudo de que o guia precisa para o compilador; pule para a seção 5 para conferir o make e o gdb. Se o gcc não estiver instalado, a resposta é esta:

$ gcc --version
bash: gcc: comando não encontrado                  « o terminal não achou nenhum programa chamado gcc

(No Ubuntu, logo abaixo pode aparecer uma sugestão do pacote que tem o comando.) Nesse caso, siga a seção da sua distribuição.


2. Ubuntu e Debian: build-essential

No Ubuntu, no Debian e nos derivados (Linux Mint, Pop!_OS, elementary), instale o pacote build-essential. Ele é um "pacote-kit": não tem programa nenhum dentro, só uma lista do que é essencial para construir (build) programas. O comando apt-cache depends mostra essa lista:

$ apt-cache depends build-essential
build-essential
 |Depende: libc6-dev                                « os .h e as bibliotecas do C para compilar
  Depende: <libc-dev>
    libc6-dev
  Depende: gcc                                       « o compilador de C
  Depende: g++                                       « o compilador de C++ (vem junto)
  Depende: make                                      « o make
    make-guile
  Depende: dpkg-dev
  Depende: libcrypt-dev
  Depende: coreutils-from-uutils

Repare no libc6-dev: é ele que traz o stdio.h e os outros arquivos .h da biblioteca do C. Sem ele, nem o "Olá, mundo" compila (veja Quando dá errado). O pacote gcc sozinho só recomenda o libc6-dev e apenas sugere o make; o build-essential exige os dois, e por isso é a recomendação oficial do Ubuntu e do Debian. O gdb não faz parte do kit: peça junto.

Instalando

São dois comandos. O primeiro atualiza a lista de pacotes (o "catálogo da loja"); o segundo instala:

sudo apt update
sudo apt install build-essential gdb
sudo
"Faça como administrador" (superuser do). Instalar programas mexe no sistema todo, então é preciso permissão de administrador. O sudo pede a sua senha, que não aparece enquanto você digita (nem bolinhas): é normal, digite e tecle Enter.
apt
O gerenciador de pacotes do Ubuntu e do Debian.
install
A ação: instalar. (update, no primeiro comando, atualiza o catálogo.)
build-essential gdb
Os nomes dos pacotes, separados por espaço. Você pode pedir quantos quiser de uma vez.

O apt mostra a lista do que vai instalar, quanto vai baixar e pergunta Continuar? [S/n]. Tecle Enter (o S maiúsculo é a resposta padrão) e espere. Em uma conexão comum, leva um ou dois minutos.

Dá para ver o que aconteceria, sem instalar nada, com a opção -s (simulate, "simular"). A simulação nem precisa de sudo. A Ana já tem o build-essential, então simulou a instalação de um compilador que ela não tem, o gcc-16 (uma versão extra, mais nova, que o Ubuntu 26.04 oferece ao lado do gcc 15):

$ apt install -s gcc-16
NOTA: Esta é apenas uma simulação!
      apt precisa de privilégios de root para execução real.
      Lembre-se também de que a trava está desativada e,
      portanto, não dependa da relevância para a situação real atual!

Instalando:                                          « o que você pediu
  gcc-16

Instalando dependências:                             « o que vem junto, automaticamente
  cpp-16  cpp-16-x86-64-linux-gnu  gcc-16-x86-64-linux-gnu  libgcc-16-dev

Pacotes sugeridos:                                   « opcionais: NÃO serão instalados
  gcc-16-locales  cpp-16-doc  gcc-16-multilib  gcc-16-doc

Resumo:
  Atualizando: 0, Instalando: 5, Removendo: 0, Não atualizando: 12   « depois vêm linhas Inst e Conf, uma de cada por pacote

Você pediu um pacote, e o apt traria cinco: o cpp-16 é o pré-processador (lembra da etapa 1 da aula Como o C Vira Programa?), o libgcc-16-dev é uma biblioteca de apoio do compilador, e assim por diante. Esse é o trabalho do gerenciador: resolver as dependências por você. Pedir para instalar algo que já está instalado também não faz mal nenhum: o apt só diz build-essential já é a versão mais nova e não muda nada.

Numa instalação de verdade, com sudo, o Resumo ganha mais duas linhas (o tamanho do download e o espaço em disco necessário; na versão do apt da Ana, curiosamente, essas duas linhas ainda saem em inglês, Download size e Space needed, porque a tradução está incompleta), e vêm a pergunta Continuar? [S/n], as linhas Obter: do download e as linhas Desempacotando … e Configurando … de cada pacote.

Qual versão vou receber?

Cada versão de distribuição "congela" uma versão do compilador. O comando apt-cache policy mostra a versão instalada e a que está disponível:

$ apt-cache policy gcc
gcc:
  Instalado: 4:15.2.0-5ubuntu1                      « a instalada
  Candidato: 4:15.2.0-5ubuntu1                      « a que o apt instalaria (a mesma: está em dia)
  Tabela de versão:
 *** 4:15.2.0-5ubuntu1 500
        500 http://archive.ubuntu.com/ubuntu resolute/main amd64 Packages   « do repositório principal do Ubuntu 26.04
        100 /var/lib/dpkg/status

Como ler 4:15.2.0-5ubuntu1: o 4: é um número interno do empacotamento (pode ignorar), 15.2.0 é a versão do GCC, e -5ubuntu1 é a revisão do pacote feita pelo Ubuntu. Se o gcc não estiver instalado, a linha Instalado diz (nenhum). O resolute é o apelido do Ubuntu 26.04.

O guia ensina C23, e a opção -std=c23 do comando padrão exige o gcc 14 ou mais novo. Versões que as distribuições mais usadas trazem:

Distribuiçãogcc padrãoServe para o guia?
Ubuntu 26.04 LTS15Sim, é a do guia
Debian 13 (trixie)14Sim
Ubuntu 24.04 LTS, Linux Mint 2213Quase tudo. O gcc 13 não aceita -std=c23: escreva -std=c2x no lugar (o nome antigo), que traz quase todo o C23. Ou instale também o gcc-14 (veja abaixo).
Debian 12 (bookworm)12Os Níveis 1 e 2 quase inteiros, com -std=c2x ou -std=c17. Faltam várias novidades do C23 (como nullptr e constexpr); quando uma aula usar uma delas, ela diz a alternativa antiga.

Se a sua distribuição traz um gcc mais velho, procure uma versão extra com número no nome, como o gcc-16 que a Ana simulou. No Ubuntu 24.04, por exemplo (ilustrativo):

sudo apt install gcc-14
gcc-14 --version

As duas versões convivem: gcc continua sendo o 13, e gcc-14 é o novo. Nesse caso, nos comandos do guia, digite gcc-14 no lugar de gcc.


3. Fedora, Arch e openSUSE

Nas outras famílias de distribuição, os pacotes têm outros nomes. Os comandos abaixo seguem a documentação oficial de cada uma. Eles não foram executados na máquina da Ana (que é Ubuntu), por isso a tabela é ilustrativa:

DistribuiçãoComandoObservação
Fedora (e Red Hat, Rocky, AlmaLinux)sudo dnf install gcc make gdbNo Fedora, o pacote gcc já puxa os arquivos .h da biblioteca do C (glibc-devel). Para o kit completo de desenvolvimento, existe o grupo sudo dnf group install development-tools.
Arch (e Manjaro, EndeavourOS)sudo pacman -S base-devel gdbO base-devel é o kit (gcc, make e companhia), como o build-essential do Ubuntu.
openSUSEsudo zypper install gcc make gdbTambém existe o padrão sudo zypper install -t pattern devel_basis, com o kit completo.

O Fedora e o Arch costumam trazer versões mais novas do GCC que o Ubuntu e o Debian, o que é ótimo para o guia. Como o comando das aulas sempre diz -std=c23, a versão que cada gcc usa "sozinho" não faz diferença (aula Versões do C).


4. O Clang, a alternativa

O Clang é o outro grande compilador de C livre, do projeto LLVM. Ele entende o mesmo C que o gcc, gera programas tão rápidos quanto, e é conhecido pelas mensagens de erro claras. O editor do guia usa o Clang, então tê-lo no computador ajuda a ver exatamente as mesmas mensagens das caixas Experimente. No Ubuntu e no Debian:

sudo apt install clang

(No Fedora, sudo dnf install clang; no Arch, sudo pacman -S clang.) O comando se chama clang e aceita as mesmas opções principais do gcc:

$ clang --version
Ubuntu clang version 21.1.8 (6ubuntu1)              « Clang 21.1.8
Target: x86_64-pc-linux-gnu
Thread model: posix
InstalledDir: /usr/lib/llvm-21/bin
$ apt-cache policy clang | head -3
clang:
  Instalado: 1:21.1.6-71                            « o pacote "clang" é um atalho para o clang-21
  Candidato: 1:21.1.6-71

Os números diferentes (21.1.6 no pacote clang, 21.1.8 no programa) não são erro: o pacote clang é só um "atalho" que aponta para o pacote clang-21, que tem o compilador de verdade e foi atualizado separadamente.

gcc (GCC)clang (LLVM)
Instalar no Ubuntu/Debiansudo apt install build-essentialsudo apt install clang
Compilargcc -std=c23 -Wall -Wextra ola.c -o olaclang -std=c23 -Wall -Wextra ola.c -o ola
Biblioteca do C no Linuxglibc (pacote libc6-dev)a mesma glibc
Versão do C sem -std=gcc 15: gnu23Clang 21: gnu17
Usadonas saídas de terminal do guiano editor do guia; é o gcc do macOS
Qual usar?Os dois. O guia usa o gcc nos exemplos de terminal porque é o padrão do Linux. Quando uma mensagem de erro não fizer sentido num, compile no outro: às vezes a explicação do outro é mais clara.

Repare que o Clang no Linux usa a mesma biblioteca do C que o gcc (a glibc, com os .h do libc6-dev). Por isso o build-essential é útil mesmo para quem prefere o Clang.


5. Conferindo a instalação

Depois de instalar, confira as três ferramentas. Cada uma responde ao --version:

$ gcc --version
gcc (Ubuntu 15.2.0-16ubuntu1) 15.2.0                « o compilador
Copyright (C) 2025 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

$ make --version
GNU Make 4.4.1                                      « o make
Compilado para x86_64-pc-linux-gnu
Copyright (C) 1988-2023 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ gdb --version
GNU gdb (Ubuntu 17.1-2ubuntu1) 17.1                 « o depurador
Copyright (C) 2025 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

O que importa é a primeira linha de cada um: o nome e a versão. O resto é o aviso de licença: os três são software livre do projeto GNU (licença GPL), que você pode usar, estudar e redistribuir. Repare que o make respondeu "Compilado para" em português: ele tem tradução, o gcc não (as mensagens do gcc saem sempre em inglês).

Também dá para ver onde os programas estão:

$ which gcc                                         « onde está o programa
/usr/bin/gcc
$ readlink /usr/bin/gcc                             « para onde aponta o atalho
gcc-15
$ which make gdb
/usr/bin/make
/usr/bin/gdb

O which mostra a pasta do programa, e o readlink revela que /usr/bin/gcc é um atalho (um link simbólico) para o gcc-15. É assim que várias versões convivem: o atalho gcc aponta para a versão padrão, e as outras são chamadas pelo nome com número (gcc-16).


6. O teste final: o primeiro programa

Agora o teste de verdade: escrever, compilar e rodar. Crie uma pasta para os seus programas e entre nela:

$ mkdir c                                           « cria a pasta c na sua pasta pessoal
$ cd c                                              « entra nela

Abra um editor de texto e crie o arquivo ola.c dentro dessa pasta. Pode ser o editor de textos do seu sistema, o nano no terminal (nano ola.c; para salvar, Ctrl+O e Enter; para sair, Ctrl+X) ou um editor de programação (aula Editores e IDEs). Digite:

#include <stdio.h>

int main(void) {
    printf("Olá, mundo!\n");
    return 0;
}

Salve, volte ao terminal, compile com o comando padrão do guia e rode:

$ gcc -std=c23 -Wall -Wextra ola.c -o ola
$ ./ola
Olá, mundo!

Se apareceu Olá, mundo!, o compilador, os arquivos .h e o ligador estão funcionando. Falta conferir o C23. Este programa usa duas novidades (bool sem #include e nullptr) e mostra o __STDC_VERSION__ (aula Versões do C):

#include <stdio.h>

int main(void) {
    bool pronto = true;
    int *nada = nullptr;
    printf("C23 funcionando: %ld\n", __STDC_VERSION__);
    printf("pronto = %d, nada é nulo = %d\n", pronto, nada == nullptr);
    return 0;
}
$ gcc -std=c23 -Wall -Wextra teste23.c -o teste23
$ ./teste23
C23 funcionando: 202311                             « 202311 = C23: tudo certo
pronto = 1, nada é nulo = 1
$ clang -std=c23 -Wall -Wextra teste23.c -o teste23 « se instalou o Clang, ele também
$ ./teste23
C23 funcionando: 202311
pronto = 1, nada é nulo = 1

Se apareceu 202311, o seu computador está pronto para o guia inteiro. O mesmo programa roda aqui no editor, que também compila com -std=c23:

Experimente: rode e compare com a saída do terminal da Ana. Depois troque true por false e rode de novo: o pronto vira 0.

#include <stdio.h>

int main(void) {
    bool pronto = true;
    int *nada = nullptr;
    printf("C23 funcionando: %ld\n", __STDC_VERSION__);
    printf("pronto = %d, nada é nulo = %d\n", pronto, nada == nullptr);
    return 0;
}

Atualizando

O gerenciador de pacotes também cuida das atualizações. De tempos em tempos, rode (ilustrativo):

sudo apt update
sudo apt upgrade

O upgrade atualiza todos os programas instalados, incluindo o gcc, para a última revisão da sua distribuição. Ele não troca o gcc 15 por um gcc 16: versões novas do compilador chegam com versões novas da distribuição, ou como pacotes extras com número no nome.


Quando dá errado

gcc: comando não encontrado
$ gcc --version
bash: gcc: comando não encontrado

O que aconteceu: o compilador não está instalado (ou foi instalado com outro nome, como gcc-14).

Como consertar: instale com sudo apt install build-essential (ou o comando da sua distribuição, na seção 3). Se instalou uma versão com número, use o nome completo: gcc-14 --version.

Esqueceu o sudo: você é root?
$ apt install gcc-16
Erro: Não foi possível abrir arquivo de trava /var/lib/dpkg/lock-frontend - open (13: Permissão negada)
Erro: Não é possível adquirir a trava da interface do dpkg (/var/lib/dpkg/lock-frontend), você é root?

O que aconteceu: instalar programas mexe no sistema todo, e só o administrador (o root) pode fazer isso. A "trava" (lock) é um arquivo que garante que só um programa instale pacotes por vez; um usuário comum não tem permissão nem de abri-lo.

Como consertar: repita o comando com sudo na frente. Um atalho do terminal: sudo !! repete o último comando com sudo.

Instalou só o gcc e o stdio.h não existe (ilustrativo)
$ gcc -std=c23 -Wall -Wextra ola.c -o ola
ola.c:1:10: fatal error: stdio.h: Arquivo ou diretório inexistente
    1 | #include <stdio.h>
      |          ^~~~~~~~~
compilation terminated.

O que aconteceu: o compilador está lá, mas os arquivos .h da biblioteca do C não. No Ubuntu e no Debian, eles ficam no pacote libc6-dev, que o build-essential sempre traz. O pacote gcc sozinho só o recomenda, e ele fica de fora quando a instalação pula os recomendados (com --no-install-recommends, comum em servidores e contêineres). Na máquina da Ana, o dpkg -S mostra de que pacote veio o arquivo:

$ dpkg -S /usr/include/stdio.h
libc6-dev:amd64: /usr/include/stdio.h

Como consertar: sudo apt install build-essential. (A tela de erro acima é ilustrativa: na máquina da Ana o stdio.h existe. Ela segue o formato real do gcc, o mesmo do #include <stdoi.h> da aula Como o C Vira Programa.)

gcc antigo: unrecognized command-line option ‘-std=c23’ (ilustrativo)
$ gcc -std=c23 -Wall -Wextra ola.c -o ola
gcc: error: unrecognized command-line option ‘-std=c23’; did you mean ‘-std=c2x’?

O que aconteceu: o gcc é anterior ao 14 e não conhece o nome c23 ("opção de linha de comando não reconhecida"). Ele mesmo sugere o nome antigo, c2x, de quando ainda não se sabia o ano da versão. (Tela ilustrativa, no formato do gcc 13: a máquina da Ana tem o gcc 15.)

Como consertar: use -std=c2x nos comandos do guia, ou instale um gcc mais novo (gcc-14), como na seção 2.

ola: comando não encontrado ao rodar o programa
$ ola
bash: ola: comando não encontrado

O que aconteceu: o programa existe, mas o terminal só procura comandos em algumas pastas do sistema (como /usr/bin), e não na pasta em que você está. Isso é proposital, por segurança.

Como consertar: diga onde ele está: ./ola. O ./ quer dizer "nesta pasta aqui".


Referência

DistribuiçãoInstalar gcc, make e gdbInstalar o Clang
Ubuntu, Debian, Mintsudo apt update e sudo apt install build-essential gdbsudo apt install clang
Fedora, Red Hatsudo dnf install gcc make gdbsudo dnf install clang
Arch, Manjarosudo pacman -S base-devel gdbsudo pacman -S clang
openSUSEsudo zypper install gcc make gdbsudo zypper install clang
ComandoPara quê
gcc --version, make --version, gdb --versionConferir se está instalado e a versão
which gccOnde está o programa
apt-cache policy gccVersão instalada e disponível (Ubuntu/Debian)
apt-cache depends build-essentialO que um pacote traz junto
apt install -s pacoteSimular uma instalação, sem instalar
dpkg -S /caminho/do/arquivoDe que pacote veio um arquivo
sudo apt update e sudo apt upgradeAtualizar o catálogo e os programas

Exercícios

1. Instalar no Ubuntu

Complete o comando que instala o kit de compilação no Ubuntu:

sudo apt install

2. Instalar no Arch

Complete o comando que instala o kit de compilação no Arch:

sudo -S base-devel

3. Conferir o depurador

Complete o comando que mostra a versão do depurador:

--version

4. Por que o guia recomenda o build-essential em vez de só o pacote gcc?

5. O gcc --version mostrou 13.3.0. O que fazer para seguir o guia?

6. O apt install respondeu você é root?. O que faltou?

Missão final: o cartão de boas-vindas

Para comemorar a instalação, um programa que mostra as ferramentas da Ana. Faça a missão aqui no editor e, depois, repita no seu terminal.

Missão: o cartão da Ana está incompleto. Acrescente uma linha printf para o make 4, logo depois da do gdb, para a saída terminar com as três ferramentas, uma por linha: gcc 15, gdb 17 e make 4.

#include <stdio.h>

int main(void) {
    printf("Ferramentas instaladas no notebook da Ana:\n");
    printf("gcc 15\n");
    printf("gdb 17\n");
    return 0;
}
#include <stdio.h>

int main(void) {
    printf("Ferramentas instaladas no notebook da Ana:\n");
    printf("gcc 15\n");
    printf("gdb 17\n");
    printf("make 4\n");
    return 0;
}

Resumo

  • O Linux instala programas pelo gerenciador de pacotes: apt (Ubuntu/Debian), dnf (Fedora), pacman (Arch), zypper (openSUSE).
  • Antes de instalar, pergunte: gcc --version. Para o guia, o ideal é o gcc 14 ou mais novo (no 13, use -std=c2x).
  • No Ubuntu e no Debian: sudo apt update e sudo apt install build-essential gdb. O kit traz o gcc, o make e o libc6-dev (os .h como o stdio.h).
  • O sudo pede a sua senha, que não aparece enquanto você digita. Sem ele, o apt pergunta "você é root?".
  • O Clang (sudo apt install clang) é a alternativa ao gcc e o compilador do editor do guia.
  • Confira com gcc --version, make --version e gdb --version, e faça o teste final: um programa com __STDC_VERSION__ que mostre 202311.
  • Próximo passo: escolher onde escrever o código, em Editores e IDEs.