C++ Instalar no Linux
As caixas Experimente do guia compilam C++ no navegador, mas, para escrever programas de verdade, guardados no seu computador, você precisa de um compilador instalado. No Linux isso é fácil: o compilador g++ está no gerenciador de pacotes de todas as distribuições, e um comando basta. Nesta aula você vai conferir se ele já existe, instalá-lo no Ubuntu, no Debian, no Fedora e no Arch, conhecer o clang++ como alternativa e compilar o seu primeiro programa no terminal.
- Como saber se o
g++já está instalado. - O que é o pacote
build-essentiale como instalá-lo no Ubuntu e no Debian. - Como ler a saída do
apte descobrir qual versão você vai receber (apt-cache policy). - Os comandos do Fedora (
dnf), do Arch (pacman) e do openSUSE (zypper). - Como instalar e usar o
clang++, o outro grande compilador. - Como conferir a instalação e compilar o primeiro programa, inclusive um teste do C++23.
Se você usa Windows ou macOS, vá para Instalar no Windows e macOS. Se ainda não quer instalar nada, tudo bem: quase todo o Nível 1 funciona nas caixas Experimente.
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". O Linux tem isso desde muito antes dos celulares: o gerenciador de pacotes. Cada programa vem num pacote, que o gerenciador baixa dos servidores da sua distribuição, confere e instala, junto com tudo de que ele depende. Para atualizar, o mesmo gerenciador cuida de tudo.
| Distribuição | Gerenciador de pacotes | Comando |
|---|---|---|
| Ubuntu, Debian, Linux Mint, Pop!_OS | APT | apt |
| Fedora, Red Hat, Rocky, AlmaLinux | DNF | dnf |
| Arch, Manjaro, EndeavourOS | pacman | pacman |
| openSUSE | zypper | zypper |
Instalar programas mexe no sistema inteiro, então os gerenciadores pedem permissão de administrador: por isso os comandos começam com sudo ("faça como superusuário"), e o terminal pede a sua senha. Ao digitar a senha, nada aparece na tela, nem asteriscos: é normal, digite e tecle Enter.
1. O g++ 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:
$ g++ --version g++ (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 g++ já está aí. Se a versão for 14 ou mais nova, você tem tudo de que o guia precisa; pule para a seção 5. Se ele não estiver instalado, a resposta é esta:
$ g++ --version bash: g++: comando não encontrado « o terminal não achou nenhum programa chamado g++
(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 arquivos da biblioteca do C para compilar
Depende: <libc-dev>
libc6-dev
Depende: gcc « o compilador de C
Depende: g++ « o compilador de C++: o que você quer
Depende: make « o make, que automatiza compilações
make-guile
Depende: dpkg-dev
Depende: libcrypt-dev
Depende: coreutils-from-uutils
Daria para instalar só o g++, mas o build-essential já traz o make (aula Make) e as peças que outras ferramentas esperam encontrar. É a recomendação oficial do Ubuntu e do Debian.
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
- sudo
- "Faça como administrador". Pede a sua senha (que não aparece enquanto você digita).
- apt
- O gerenciador de pacotes do Ubuntu e do Debian.
- install
- A ação: instalar.
- build-essential
- O nome do pacote. Você pode pôr vários, separados por espaço:
sudo apt install build-essential clang.
O apt mostra a lista do que vai instalar, quanto vai baixar e pergunta Deseja 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") do apt-get, o "irmão mais velho" do apt. A simulação nem precisa de sudo. No computador da Ana, que já tem o g++, a resposta foi esta:
$ apt-get -s install build-essential g++
NOTA: Esta é apenas uma simulação!
apt-get 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!
Lendo listas de pacotes...
Construindo árvore de dependências...
Lendo informação de estado...
build-essential já é a versão mais nova (12.12ubuntu2.26.04.2). « já instalado
g++ já é a versão mais nova (4:15.2.0-5ubuntu1). « já instalado
Resolvendo dependências...
0 pacotes atualizados, 0 pacotes novos instalados, 0 a serem removidos e 12 não atualizados.
Pedir para instalar algo que já está instalado não faz mal nenhum: o apt só diz "já é a versão mais nova" e não muda nada. Para ver como fica uma instalação de verdade, a Ana simulou a instalação de um compilador que ela não tem, o g++-16 (uma versão extra, mais nova, que o Ubuntu 26.04 oferece ao lado do g++ 15). As linhas técnicas do fim (Inst e Conf, uma por pacote) foram filtradas com o grep -v:
$ apt-get -s install g++-16 | grep -v "^Conf\|^Inst"
NOTA: Esta é apenas uma simulação!
apt-get 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!
Lendo listas de pacotes...
Construindo árvore de dependências...
Lendo informação de estado...
Resolvendo dependências...
Os pacotes adicionais a seguir serão instalados: « dependências: vêm junto, automaticamente
cpp-16 cpp-16-x86-64-linux-gnu g++-16-x86-64-linux-gnu gcc-16
gcc-16-x86-64-linux-gnu libgcc-16-dev libstdc++-16-dev
Pacotes sugeridos: « opcionais: NÃO serão instalados
gcc-16-locales cpp-16-doc g++-16-multilib gcc-16-doc gcc-16-multilib
libstdc++-16-doc
Os NOVOS pacotes a seguir serão instalados: « o total: o que você pediu + dependências
cpp-16 cpp-16-x86-64-linux-gnu g++-16 g++-16-x86-64-linux-gnu gcc-16
gcc-16-x86-64-linux-gnu libgcc-16-dev libstdc++-16-dev
0 pacotes atualizados, 8 pacotes novos instalados, 0 a serem removidos e 12 não atualizados.
Você pediu um pacote, e o apt trouxe oito: o cpp-16 é o pré-processador, o gcc-16 é a base da família GCC, e o libstdc++-16-dev são os arquivos da biblioteca padrão do C++ (o iostream que o pré-processador cola, lembra da aula Como o C++ Vira Programa?). Esse é o trabalho do gerenciador: resolver as dependências por você. (Curiosidade: no Ubuntu 26.04, esse g++-16 é uma versão de pré-lançamento, de março de 2026, anterior ao GCC 16.1 oficial; o apt-cache policy g++-16 mostra 16-20260322. Para o guia, o g++ 15 padrão é o recomendado.) Na instalação real, depois dessa lista vêm a pergunta Deseja continuar? [S/n], o download e a configuração.
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 g++
g++:
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 « vem 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 g++ não estiver instalado, a linha Instalado diz (nenhum). O resolute é o apelido do Ubuntu 26.04.
Versões que as distribuições mais usadas trazem (conferido nos repositórios oficiais em outubro de 2026):
| Distribuição | g++ padrão | Serve para o guia? |
|---|---|---|
| Ubuntu 26.04 LTS | 15 | Sim, é a do guia |
| Ubuntu 24.04 LTS, Linux Mint 22 | 13 | Quase tudo. Falta o std::print/std::println (chegou no g++ 14): instale também o g++-14 (veja abaixo) |
| Debian 13 (trixie) | 14 | Sim |
| Debian 12 (bookworm) | 12 | Só o Nível 1 básico: faltam std::format e std::print |
Se a sua distribuição traz um g++ mais velho, procure uma versão extra com número no nome, como a Ana fez com o g++-16. No Ubuntu 24.04, por exemplo:
sudo apt install g++-14 g++-14 --version
As duas versões convivem: g++ continua sendo o 13, e g++-14 é o novo. Nesse caso, nos comandos do guia, digite g++-14 no lugar de g++.
3. Fedora, Arch e openSUSE
Nas outras famílias de distribuição, o pacote do compilador C++ tem outro nome. 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ção | Comando | Observação |
|---|---|---|
| Fedora (e Red Hat, Rocky, AlmaLinux) | sudo dnf install gcc-c++ | No Fedora, o pacote gcc é só o compilador de C; o de C++ é o gcc-c++. O make vem com sudo dnf install make. |
| Arch (e Manjaro, EndeavourOS) | sudo pacman -S gcc | No Arch, o pacote gcc já inclui o g++. Para o kit completo (com make), use sudo pacman -S base-devel. |
| openSUSE | sudo zypper install gcc-c++ | Mesmo nome do Fedora. |
O Fedora e o Arch costumam trazer versões mais novas do GCC que o Ubuntu e o Debian (o GCC 16 saiu em abril de 2026), o que é ótimo para o guia. Só lembre: o GCC 16 usa o C++20 quando você não passa -std, enquanto o g++ 15 usa o C++17. Com o -std=c++23 do comando padrão das aulas, isso 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 g++, 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 g++:
$ 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
clang:
Instalado: 1:21.1.6-71 « o pacote "clang" é um atalho para o clang-21
Candidato: 1:21.1.6-71
Tabela de versão:
*** 1:21.1.6-71 500
500 http://archive.ubuntu.com/ubuntu resolute/universe amd64 Packages
100 /var/lib/dpkg/status
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. E o universe indica que o Clang vem da parte do Ubuntu mantida pela comunidade.
| g++ (GCC) | clang++ (LLVM) | |
|---|---|---|
| Instalar no Ubuntu/Debian | sudo apt install build-essential | sudo apt install clang |
| Compilar | g++ -std=c++23 -Wall -Wextra ola.cpp -o ola | clang++ -std=c++23 -Wall -Wextra ola.cpp -o ola |
| Biblioteca padrão no Linux | libstdc++ (do GCC) | a mesma libstdc++, por padrão |
| Usado | nas saídas de terminal do guia | no editor do guia; padrão no macOS |
| Qual usar? | Os dois. O guia usa o g++ 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 padrão do g++ (a libstdc++). Por isso o build-essential é útil mesmo para quem prefere o Clang.
5. Conferindo a instalação
Depois de instalar, confira três coisas: a versão, onde o programa está e se ele aceita o C++23.
$ g++ --version g++ (Ubuntu 15.2.0-16ubuntu1) 15.2.0 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. $ which g++ « onde está o programa /usr/bin/g++ $ readlink /usr/bin/g++ « para onde aponta o atalho g++-15
O which mostra a pasta do programa, e o readlink revela que /usr/bin/g++ é um atalho (um link simbólico) para o g++-15. É assim que várias versões convivem: o atalho g++ aponta para a versão padrão, e as outras são chamadas pelo nome com número (g++-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 cpp « cria a pasta cpp na sua pasta pessoal $ cd cpp « entra nela
Abra um editor de texto e crie o arquivo ola.cpp dentro dessa pasta. Pode ser o editor de textos do seu sistema, o nano no terminal (nano ola.cpp; para salvar, Ctrl+O e Enter; para sair, Ctrl+X) ou um editor de programação (aula Editores e IDEs). Digite:
#include <iostream>
int main() {
std::cout << "Olá, mundo!\n";
}
Salve, volte ao terminal, compile com o comando padrão do guia e rode:
$ g++ -std=c++23 -Wall -Wextra ola.cpp -o ola $ ./ola Olá, mundo!
Se apareceu Olá, mundo!, o compilador está funcionando. Falta conferir o C++23: este programa usa o std::println, que só existe no g++ 14 ou mais novo, com -std=c++23:
#include <print>
int main() {
std::println("C++23 funcionando: {}", __cplusplus);
}
$ g++ -std=c++23 -Wall -Wextra teste23.cpp -o teste23 $ ./teste23 C++23 funcionando: 202302 « 202302 = C++23 (aula Versões do C++)
Se os dois rodaram, a sua instalação está pronta para o guia inteiro. Faça o mesmo teste aqui no editor do guia, que usa outro compilador (o Clang) e deve dar o mesmo resultado:
Missão: rode e confira o 202302. Depois acrescente uma segunda linha com std::println("Instalação da Ana: OK"); logo abaixo da primeira (o {} só é preciso quando há um valor para encaixar).
#include <print>
int main() {
std::println("C++23 funcionando: {}", __cplusplus);
}
#include <print>
int main() {
std::println("C++23 funcionando: {}", __cplusplus);
std::println("Instalação da Ana: OK");
}
Para comparar, compile o ola.cpp também com o Clang, se você o instalou. O resultado é o mesmo programa:
$ clang++ -std=c++23 -Wall -Wextra ola.cpp -o ola $ ./ola Olá, mundo!
Atualizando
O compilador é atualizado junto com o resto do sistema: sudo apt update seguido de sudo apt upgrade (no Fedora, sudo dnf upgrade; no Arch, sudo pacman -Syu). Versões principais novas (do 15 para o 16) chegam quando você atualiza a distribuição inteira, ou instalando a versão extra com número no nome.
Quando dá errado
bash: g++: comando não encontrado
$ g++ --version bash: g++: comando não encontrado
O que significa: o terminal procurou um programa chamado g++ nas pastas do sistema e não achou. Ou ele não está instalado, ou você instalou só o gcc (o compilador de C), que em algumas distribuições vem sem o g++.
Como consertar: instale o build-essential (Ubuntu/Debian), o gcc-c++ (Fedora/openSUSE) ou o gcc (Arch), e rode g++ --version de novo.
E: Não foi possível abrir arquivo de trava … (13: Permissão negada)
$ apt-get install g++-14 E: Não foi possível abrir arquivo de trava /var/lib/dpkg/lock-frontend - open (13: Permissão negada) E: Não é possível adquirir a trava da interface do dpkg (/var/lib/dpkg/lock-frontend), você é root?
O que significa: faltou o sudo. Instalar programas exige permissão de administrador (root), e o apt pergunta, no fim: "você é root?". A "trava" (lock) é um arquivo que impede dois programas de instalarem coisas ao mesmo tempo, e só o administrador pode mexer nela.
Como consertar: repita com sudo na frente: sudo apt install g++-14. Se a mensagem disser que a trava está "em uso por outro processo", é porque outra instalação (por exemplo, a atualização automática do sistema) está rodando: espere alguns minutos e tente de novo.
E: Não é possível encontrar o pacote …
$ apt-get -s install buil-essential
NOTA: Esta é apenas uma simulação!
apt-get 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!
Lendo listas de pacotes...
Construindo árvore de dependências...
Lendo informação de estado...
E: Não é possível encontrar o pacote buil-essential « faltou o d de build
O que significa: nenhum pacote com esse nome existe no catálogo. Quase sempre é um erro de digitação, um nome de outra distribuição (gcc-c++ é do Fedora, não existe no Ubuntu) ou um catálogo desatualizado.
Como consertar: confira o nome; rode sudo apt update para atualizar o catálogo; para procurar, use apt search g++.
cc1plus: fatal error: ola.cpp: Arquivo ou diretório inexistente
$ g++ ola.cpp -o ola cc1plus: fatal error: ola.cpp: Arquivo ou diretório inexistente compilation terminated.
O que significa: o compilador está instalado e funcionando, mas não achou o arquivo ola.cpp na pasta onde você está. Repare no prompt: a Ana estava em /tmp, e o arquivo está em ~/cpp. O cc1plus é o compilador interno que o g++ chama (aula Como o C++ Vira Programa).
Como consertar: entre na pasta do arquivo (cd ~/cpp) ou confira o nome com ls. Cuidado com editores que salvam como ola.cpp.txt: o ls mostra o nome verdadeiro.
std::println não funciona, mesmo com -std=c++23
O que significa: o seu g++ é anterior ao 14 (por exemplo, o g++ 13 do Ubuntu 24.04), e a biblioteca padrão dele ainda não tem o arquivo <print>. O erro tem o mesmo formato do #include errado que você viu na aula Como o C++ Vira Programa: fatal error: print: Arquivo ou diretório inexistente (ilustrativo: a máquina do guia tem o g++ 15, onde o <print> existe).
Como consertar: instale uma versão mais nova ao lado (sudo apt install g++-14) e compile com g++-14; ou use o std::cout, que funciona em qualquer versão.
Referência
| Tarefa | Ubuntu / Debian | Fedora | Arch |
|---|---|---|---|
| Instalar o g++ | sudo apt install build-essential | sudo dnf install gcc-c++ | sudo pacman -S gcc (ou base-devel) |
| Instalar o Clang | sudo apt install clang | sudo dnf install clang | sudo pacman -S clang |
| Ver a versão disponível | apt-cache policy g++ | dnf info gcc-c++ | pacman -Si gcc |
| Atualizar | sudo apt update && sudo apt upgrade | sudo dnf upgrade | sudo pacman -Syu |
| Simular (sem instalar) | apt-get -s install … | dnf install --assumeno … | (não tem) |
| Para conferir | Comando |
|---|---|
| a versão do g++ | g++ --version |
| a versão do Clang | clang++ --version |
| onde está o programa | which g++ |
| se o C++23 funciona | compilar o teste23.cpp com -std=c++23 |
Exercícios
1. Instalar no Ubuntu
Complete o comando que instala o kit de compilação no Ubuntu:
2. Instalar no Fedora
No Fedora, qual é o nome do pacote do compilador C++?
3. O apt respondeu E: Não é possível adquirir a trava … você é root?. O que faltou?
4. A Ana tem o Ubuntu 24.04, com g++ 13. O que acontece com o std::println?
5. Para que serve o apt-get -s install?
Missão final: o cartão de boas-vindas
Missão: escreva um programa que mostre as duas linhas abaixo, cada uma com um std::println. Lembre: o texto vai entre aspas, e cada linha termina com ;.
Compilador instalado! Pasta de trabalho: ~/cpp
#include <print>
int main() {
// escreva aqui as duas linhas com std::println
}
#include <print>
int main() {
std::println("Compilador instalado!");
std::println("Pasta de trabalho: ~/cpp");
}
A linha que começa com // é um comentário: o compilador a ignora, ela serve só para pessoas lerem (aula Comentários). Pode apagá-la ou deixá-la.
Resumo
- Confira primeiro:
g++ --version.comando não encontrado= não está instalado. - Ubuntu/Debian:
sudo apt updateesudo apt install build-essential(trazg++,gccemake). - Fedora:
sudo dnf install gcc-c++; Arch:sudo pacman -S gcc; openSUSE:sudo zypper install gcc-c++. apt-cache policy g++mostra a versão; para o guia, o ideal é g++ 14 ou mais novo (ostd::printlnchegou no 14). Versões extras:g++-14,g++-16.- O
clang++(sudo apt install clang) é a alternativa, e é o compilador do editor do guia. - Teste final:
g++ -std=c++23 -Wall -Wextra ola.cpp -o olae./ola; depois oteste23.cppcomstd::println. - Próximo passo: escolher um editor de código, em Editores e IDEs (ou, no Windows e no macOS, Instalar no Windows e macOS).