GCC-14.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
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.2.
Cuidado
Se você estiver atualizando o GCC a partir de qualquer outra versão
anterior ao 14.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.
Informação do Pacote
-
Transferência (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-14.2.0/gcc-14.2.0.tar.xz
-
Transferência (FTP):
-
Soma de verificação MD5 da transferência:
2268420ba02dc01821960e274711bde0
-
Tamanho da transferência: 88 MB
-
Espaço em disco estimado exigido: 11 GB (3,4 GB instalado com
todas as linguagens listadas; adicionar 1,6 GB para testes)
-
Tempo de construção estimado: 14 UPC (adicionar 34 UPC para
testes; ambos com paralelismo=8)
Dependências do GCC
Opcionais
GDB-15.1,
Graphviz-12.1.0 (alguns testes usam ele se
instalado; observe que se ele estiver instalado, porém não
construído com libpng-1.6.43, esses testes falharão),
Valgrind-3.23.0 (para testes) e ISL (para habilitar
otimização do graphite)
Instalação do GCC
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.2/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 \
--enable-host-pie \
--disable-fixincludes \
--enable-languages=c,c++,fortran,go,objc,obj-c++,m2 &&
make
Se executar testes, como no LFS, remova/corrija várias falhas de
teste conhecidas:
sed -e '/cpython/d' -i ../gcc/testsuite/gcc.dg/plugin/plugin.exp
sed -e 's/no-pic /&-no-pie /' -i ../gcc/testsuite/gcc.target/i386/pr113689-1.c
sed -e 's/300000/(1|300000)/' -i ../libgomp/testsuite/libgomp.c-c++-common/pr109062.c
sed -e 's/{ target nonpic } //' \
-e '/GOTPCREL/d' -i ../gcc/testsuite/gcc.target/i386/fentryname3.c
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-14.1.0, cerca de setenta e
quatro (74) 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 cento e dez (110) falhas
inesperadas em mais que seiscentos e dezessete mil (617.000)
testes. Para executar os testes, emita:
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/14.2.0/include{,-fixed} &&
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/14.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-host-pie
: Torna os
executáveis do compilador PIE (Position Independent Executable).
Isso pode ser usado para aumentar a proteção contra ataques ROP
(Return Oriented Programming) e pode ser visto como parte de uma
tendência mais ampla de fortalecer os binários.
--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.
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
|