GCC-15.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 elas COBOL, D e Ada, estão
            disponíveis na coleção. COBOL atualmente é suportada somente em
            sistemas x86-64. D e Ada tem uma exigência de instruções de
            autoaprimoramento de binário para a primeira instalação, de forma
            que a instalação delas não está descrita aqui. Para instalar D ou
            Ada, você pode prosseguir ao longo das mesmas linhas conforme
            abaixo depois de instalar o compilador correspondente a partir de
            um pacote binário. Finalmente, adicione ada ou d ou
            cobol à linha --enable-languages, conforme
            desejado.
          
         
        
          Esse pacote é conhecido por construir e funcionar corretamente
          usando uma plataforma LFS 12.4.
        
        
          
          
            Cuidado
          
          
            Se você estiver atualizando o GCC a partir de qualquer outra versão
            anterior ao 15.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-15.2.0/gcc-15.2.0.tar.xz
              
             
            - 
              
                Transferência (FTP): 
              
             
            - 
              
                Soma de verificação MD5 da transferência:
                b861b092bf1af683c46a8aa2e689a6fd
              
             
            - 
              
                Tamanho da transferência: 96 MB
              
             
            - 
              
                Espaço em disco estimado exigido: 12 GB (3,8 GB instalado com
                todas as linguagens listadas; adicionar 2 GB para testes)
              
             
            - 
              
                Tempo de construção estimado: 16 UPC (adicionar 33 UPC para
                testes; ambos com paralelismo=8)
              
             
          
         
        
          Dependências do GCC
        
        
          Opcionais
        
        
          GDB-16.3,
          Graphviz-13.1.2 (alguns testes usam ele se
          instalado; observe que se ele estiver instalado, porém não
          construído com libpng-1.6.50, esses testes falharão),
          Valgrind-3.25.1 (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.4/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 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 (passam
          quando esperado FAIL). A partir do gcc-15.2.0, cerca de 69 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 cerca de 107 falhas inesperadas em mais que
          610.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/15.2.0/include{,-fixed}     &&
ln -sfv ../../libexec/gcc/$(gcc -dumpmachine)/15.2.0/liblto_plugin.so \
        /usr/lib/bfd-plugins/
        
          
          
            Importante
          
          
            Agora você deveria atualizar readline para 8.3-rc1 ou mais
            recente seguindo o livro LFS, ou os pacotes que usam readline
            possivelmente falhem para construir.
          
         
       
      
        
          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
                   
                 |