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.
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.
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.
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.
Transferência (HTTP): https://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz
Transferência (FTP): ftp://ftp.gnu.org/gnu/gcc/gcc-12.2.0/gcc-12.2.0.tar.xz
Soma de verificação MD5 da transferência: 73bafd0af874439dcdb9fc063b6fb069
Tamanho da transferência: 81 MB
Espaço em disco estimado exigido: 10,5 GB (2,4 GB instalado com todas as linguagens listadas; adicionar 1,3 GB para os testes)
Tempo de construção estimado: 32 UPC (adicionar 66 UPC para os testes; ambos com paralelismo=4)
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
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/
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
.
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.