GCC-12.2.0

Introdução ao "GCC"

O pacote GCC contém a coleção de compiladores "GNU". Esta página descreve a instalação de compiladores para as seguintes linguagens: "C", "C++", "Fortran", "Objective C", "Objective C++" e "Go". 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 é 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 adequadamente usando uma plataforma LFS 11.3.

[Cuidado]

Cuidado

Se você estiver atualizando o GCC a partir de qualquer outra versão anterior ao 12.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.

Alguns cabeçalhos do sistema precisam ser corrigidos para serem usados com o "GCC". Isso é feito durante a instalação do "GCC", e os cabeçalhos corrigidos são instalados em /usr/lib/gcc/<trio da máquina>/<GCC version>/include-fixed . Isso é inofensivo se o "GCC" for construído durante o estágio LFS. Mas se você reinstalar o "GCC" no BLFS, [então] alguns dos pacotes do BLFS possivelmente sejam corrigidos. Se um desses pacotes for reinstalado posteriormente, [então] os cabeçalhos corrigidos não serão atualizados, o que possivelmente leve a incompatibilidades de versões. Caso isso aconteça, os cabeçalhos corrigidos precisam ser atualizados executando (como root): /usr/libexec/gcc/x86_64-pc -linux-gnu/12.2.0/install-tools/mkheaders . O trio da máquina possivelmente seja diferente em um sistema de 32 bits.

Informação do Pacote

Dependências do "GCC"

Opcionais

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

Observações de Usuário(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/11.3-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 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                               \
    --enable-languages=c,c++,fortran,go,objc,obj-c++ &&
make

Se você tiver instalado pacotes adicionais, como Valgrind e GDB, [então] 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-12.2.0", cerca de sessenta (60) "FAIL" ocorrem no conjunto guality, bem como falhas diversas em todo o resto da suíte de teste, quinze dos quais já estão presentes nos testes "GCC" do LFS. Se todos os compiladores acima forem construídos, [então] existirão em torno de oitenta (80) falhas inesperadas em mais que quatrocentos e oitenta e dois mil (482.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/12.2.0/include{,-fixed}

Alguns pacotes esperam encontrar o pré-processador "C" em /lib ou possivelmente se refiram ao compilador "C" sob o nome cc. Os seguintes vinculos simbólicos não são necessários se você tiver seguido as instruções do LFS, pois eles já foram criados. Se você não os tiver em seu sistema, [então] emita como o(a) usuário(a) root:

ln -v -sf ../usr/bin/cpp /lib          &&
ln -v -sf gcc /usr/bin/cc             &&
install -v -dm755 /usr/lib/bfd-plugins &&
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/12.2.0/liblto_plugin.so /usr/lib/bfd-plugins/

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++: Esse comando identifica quais linguagens construir. Você possivelmente modifique esse comando para remover linguagens indesejadas. Outras linguagens podem ser adicionadas, incluindo "ADA", "D", "BRIG" (adicionar brig à lista de linguagens habilitadas), um formato binário para "Heterogeneous System Architecture Intermediate Language" ("HSAIL") e "JIT" (adicionar jit à lista de linguagens habilitadas), uma biblioteca que pode ser vinculada a interpretadores que desejam gerar código de máquina em voo em tempo de execução. Eles não foram testados pelos(as) desenvolvedores(as) do BLFS.

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.

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, go e gofmt, rigidamente vinculados a nomes específicos de arquitetura
Bibliotecas Instaladas: libgfortran.{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 em "GCC" para a linguagem Go

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 em "GCC" para a linguagem Fortran