Este guia é para quem quer um GCC mais novo que o do sistema. Para as lições, o GCC
do apt basta: veja os guias de C e de C++.
O mesmo GCC traz o gcc (C) e o g++ (C++).
Consulte o site oficial do GCC para escolher a versão e a
documentação de instalação para os requisitos. O
exemplo usa a versão 16.2.0; para outra versão, altere GCC_VERSION.
Preparar (Debian/Ubuntu)
Instale as ferramentas, incluindo um compilador já pronto para construir o novo:
sudo apt install build-essential wget xz-utils
Baixar o código-fonte
GCC_VERSION=16.2.0
mkdir -p "$HOME/gcc-source"
cd "$HOME/gcc-source"
wget --timeout=30 "https://ftp.gnu.org/gnu/gcc/gcc-${GCC_VERSION}/gcc-${GCC_VERSION}.tar.xz"
tar -xf "gcc-${GCC_VERSION}.tar.xz"
cd "gcc-${GCC_VERSION}"
./contrib/download_prerequisites
Configurar, compilar e instalar
Compile numa pasta separada do código-fonte e instale na sua pasta pessoal, sem
sudo. O destino é o --prefix: guarde-o, porque todos os passos seguintes usam
o mesmo caminho.
mkdir -p "../build-gcc-${GCC_VERSION}"
cd "../build-gcc-${GCC_VERSION}"
"../gcc-${GCC_VERSION}/configure" \
--prefix="$HOME/.local/gcc-${GCC_VERSION}" \
--enable-languages=c,c++ \
--disable-multilib
make -j"$(nproc)"
make install
--enable-languages=c,c++ habilita C e C++; --disable-multilib evita construir
as variantes de 32 bits num Linux de 64 bits. A compilação demora e ocupa vários
gigabytes. Se faltar memória, reduza o paralelismo para make -j2.
Usar o novo GCC
Confira pelo caminho completo e, depois, coloque a pasta no início do PATH do terminal atual:
GCC_VERSION=16.2.0
"$HOME/.local/gcc-${GCC_VERSION}/bin/gcc" --version
export PATH="$HOME/.local/gcc-${GCC_VERSION}/bin:$PATH"
hash -r
command -v gcc g++
hash -r limpa os caminhos que o Bash guardou, para ele achar o compilador novo.
Para manter nos próximos terminais, adicione ao final de ~/.bashrc a linha
abaixo (com a sua versão) e abra um terminal novo:
export PATH="$HOME/.local/gcc-16.2.0/bin:$PATH"
Mantenha o GCC do apt instalado: outros pacotes dependem dele, e o compilado
continua usando ferramentas e bibliotecas do sistema.
C++: o programa compila, mas não roda
O g++ novo liga o programa à biblioteca padrão de C++ (libstdc++) dele, mas,
ao executar, o Linux carrega a do sistema, que é mais antiga. Com recursos novos,
como std::println, aparece:
./main: /lib/x86_64-linux-gnu/libstdc++.so.6: version `GLIBCXX_3.4.36' not found
Indique a pasta da biblioteca nova ao compilar (-Wl,-rpath grava o caminho no
executável):
g++ -std=c++23 main.cpp -o main -Wl,-rpath,"$HOME/.local/gcc-16.2.0/lib64"
./main
Para um teste rápido sem recompilar, use
LD_LIBRARY_PATH="$HOME/.local/gcc-16.2.0/lib64" ./main.
O compilador instalado não aparece
- O PATH precisa apontar para o
bindo mesmo--prefixusado noconfigure. Se você instalou em outro lugar (por exemplo,/usr/local/gcc-16), troque o caminho em todos os comandos acima. - Não lembra o prefixo? Na pasta da compilação, rode
./config.status --config. GCC_VERSIONvale só no terminal em que foi definida.- Se o caminho completo falhar, confira se o
make installterminou sem erros, conforme a instalação oficial.