GCC-13.2.0

Introdução ao GCC

O pacote GCC contém a GNU Compiler Collection. Esta página descreve a instalação de compiladores para as seguintes linguagens: C, C++, Fortran, Objective C, Objective C++, Go e Modula2. Como C e C++ são instalados no LFS, esta página é tanto para atualizar C e C++ quanto para instalar compiladores adicionais.

[Nota]

Nota

Linguagens adicionais, entre as quais D e Ada, estão disponíveis na coleção. D e Ada tem um requisito de instruções iniciais de carregamento de binário para a primeira instalação, de modo que a instalação deles não está descrita aqui. Para instalá-los, você pode proceder da mesma forma abaixo depois de instalar o compilador correspondente a partir de um pacote binário, adicionando ada ou d à linha --enable-languages.

Esse pacote é conhecido por construir e funcionar corretamente usando uma plataforma LFS 12.0.

[Cuidado]

Cuidado

Se você estiver atualizando o GCC a partir de qualquer outra versão anterior ao 13.2.0, então você precisa ser cuidadoso(a) ao compilar módulos de terceiros do núcleo. Você deveria garantir que o núcleo e todos os módulos nativos dele também sejam compilados usando a mesma versão do GCC que você usa para construir o módulo de terceiros. Esse problema não afeta as atualizações do núcleo nativo (e dos módulos do núcleo), pois as instruções abaixo são uma reinstalação completa do GCC. Se você tiver módulos de terceiros instalados, certifique-se de que eles sejam recompilados usando a versão atualizada do GCC. Como sempre, nunca atualize os cabeçalhos do núcleo a partir daqueles usados quando o Glibc foi compilado durante o LFS.

Informação do Pacote

Dependências do GCC

Opcionais

GDB-13.2, Valgrind-3.21.0 (para os testes) e ISL (para habilitar a otimização "graphite")

Observações de Editor(a): https://wiki.linuxfromscratch.org/blfs/wiki/gcc

Instalação do GCC

[Importante]

Importante

Mesmo se você especificar somente linguagens diferentes de "C" e "C++" para o comando ./configure abaixo, o processo de instalação substituirá seus compiladores e bibliotecas "C" e "C++" do GCC existentes. Executar a suíte completa de teste é recomendado.

Não continue com o comando make install até ter certeza de que a construção foi bem-sucedida. Você pode comparar seus resultados de teste com aqueles encontrados em https://gcc.gnu.org/ml/gcc-testresults/. Você também possivelmente deseje consultar as informações encontradas na seção do GCC do Capítulo 8 no livro LFS (../../../../lfs/view/12.0-systemd/chapter08/gcc.html).

As instruções abaixo estão intencionalmente realizando um processo de bootstrap. As instruções iniciais de carregamento são necessárias para robustez e são altamente recomendadas ao atualizar a versão dos compiladores. Para desabilitar as instruções iniciais de carregamento de qualquer maneira, adicione --disable-bootstrap às opções ./configure abaixo.

Instale o GCC executando os seguintes comandos:

case $(uname -m) in
  x86_64)
    sed -i.orig '/m64=/s/lib64/lib/' gcc/config/i386/t-linux64
  ;;
esac

mkdir build               &&
cd    build               &&

../configure              \
    --prefix=/usr         \
    --disable-multilib    \
    --with-system-zlib    \
    --enable-default-pie  \
    --enable-default-ssp  \
    --disable-fixincludes \
    --enable-languages=c,c++,fortran,go,objc,obj-c++,m2 &&
make

Se você tiver instalado pacotes adicionais, como valgrind e gdb, a parte gcc da suíte de teste executará mais testes que no LFS. Alguns deles informarão FAIL e outros XPASS (aprovados quando esperado FAIL). A partir do gcc-13.2.0, cerca de sessenta e cinco (65) FAIL ocorrem na suíte guality, bem como falhas diversas em todo o resto da suíte de teste. Se todos os compiladores acima forem construídos, existirão um pouco mais que oitenta (80) falhas inesperadas em mais que quinhentos e quarenta e seis mil (546.000) testes. Para executar os testes, emita:

ulimit -s 32768 &&
make -k check

Os testes são muito longos e os resultados possivelmente sejam difíceis de encontrar nos registros, especialmente se você usar tarefas paralelas com "make". Você consegue obter um resumo dos testes com:

../contrib/test_summary

Agora, como o(a) usuário(a) root:

make install &&

mkdir -pv /usr/share/gdb/auto-load/usr/lib             &&
mv -v /usr/lib/*gdb.py /usr/share/gdb/auto-load/usr/lib &&

chown -v -R root:root \
    /usr/lib/gcc/*linux-gnu/13.2.0/include{,-fixed}

Explicações do Comando

mkdir build; cd build: A documentação do GCC recomenda construir o pacote em um diretório de construção dedicado.

--disable-multilib: Esse parâmetro garante que os arquivos sejam criados para a arquitetura específica do seu computador.

--with-system-zlib: Usa a zlib do sistema em vez daquela empacotada. A zlib é usada para comprimir e descomprimir a linguagem intermediária do GCC em arquivos de objeto "Link Time Optimization" ("LTO").

--enable-default-pie: Torna a opção -fpie o padrão ao compilar aplicativos. Juntamente com o recurso ASLR habilitado no núcleo, isso derrota alguns tipos de ataques baseados em esquemas conhecidos de memória.

--enable-default-ssp: Torna a opção -fstack-protector-strong o padrão ao compilar aplicativos. SSP é uma técnica que evita a alteração do fluxo do programa por corrompimento da pilha de parâmetros.

--enable-languages=c,c++,fortran,go,objc,obj-c++,m2: Esse comando identifica quais linguagens construir. Você pode modificar esse comando para remover linguagens indesejadas. A GCC também suporta Ada e D, mas construir a GCC com suporte a Ada (ou D) precisa de um compilador Ada (ou D) existente. Portanto, eles não estão habilitados aqui.

ulimit -s 32768: Esse comando evita que vários testes fiquem sem espaço na pilha.

make -k check: Esse comando executa a suíte de teste sem parar se quaisquer erros forem encontrados.

../contrib/test_summary: Esse comando produzirá um resumo dos resultados da suíte de teste. Você pode anexar | grep -A7 Summ ao comando para produzir uma versão ainda mais condensada do resumo. Você possivelmente também deseje redirecionar a saída gerada para um arquivo para revisão e comparação posterior.

mv -v /usr/lib/*gdb.py ...: A etapa de instalação coloca alguns arquivos usados pelo gdb sob o diretório /usr/lib. Isso gera mensagens de erro falsas ao executar o ldconfig. Esse comando move os arquivos para outro local.

chown -v -R root:root /usr/lib/gcc/*linux-gnu/...: Se o pacote for construído por um(a) usuário(a) diferente de "root", [então] titularidade da propriedade do diretório include instalado (e o conteúdo dele) estará incorreta. Esse comando muda a titularidade da propriedade para o(a) usuário(a) e grupo root.

--enable-host-shared --enable-languages=jit: Construir libgccjit, uma biblioteca para incorporar a GCC em aplicativos e bibliotecas para gerar código de máquina . Apesar do JIT (just-in-time) no nome, a biblioteca também pode ser usada para compilação AOT (ahead-of-time). --enable-host-shared é necessário para construir libgccjit, mas retarda significativamente a GCC. Portanto libgccjit deveria ser construída e instalada separadamente, não como parte da instalação principal da GCC. Se você precisar dessa biblioteca, configure a GCC com essas duas opções e instale a biblioteca executando make -C gcc jit.install-common jit.install-info como o(a) usuário(a) root. Essa biblioteca não é usada por nenhum pacote do BLFS, nem testada pelos(as) desenvolvedores(as) do BLFS.

Conteúdo

Alguns nomes e descrições de aplicativos e bibliotecas não estão listados aqui, mas podem ser encontrados na seção do LFS para "GCC", já que foram inicialmente instalados durante a construção do LFS.

Aplicativos Instalados: gccgo, gfortran, gm2, go e gofmt, rigidamente vinculados a nomes específicos de arquitetura
Bibliotecas Instaladas: libgfortran.{so,a}, libgm2.{so,a}, libgo.{so,a}, libgobegin.a, libgolibbegin.a, libobjc.{so,a} e numerosos(as) outros(as) bibliotecas e executáveis de tempo de execução
Diretórios Instalados: /usr/lib/go

Descrições Curtas

gccgo

é um compilador baseado na GCC para a linguagem Go

gm2

é um compilador baseado na GCC para a linguagem Modula-2

go

é uma ferramenta para gerenciar o código-fonte da Go

gofmt

é uma ferramenta para formatar o código-fonte da Go

gfortran

é um compilador baseado na GCC para a linguagem Fortran