GCC

Tela Software:
GCC
Detalhes de Software:
Versão: 8.2.0 Atualizado
Data de upload: 16 Aug 18
Revelador: The GCC Team
Licença: Livre
Popularidade: 108

Rating: 3.0/5 (Total Votes: 3)

O GCC (GNU Compiler Collection) é um software de linha de comando de software livre projetado para atuar como um compilador para sistemas operacionais baseados em GNU / Linux e BSD. Ele inclui front-ends para várias linguagens de programação, incluindo Objective-C, Go, C ++, Java, C, Ada e Fortran.


Recursos em resumo

Com o GCC você pode configurar, compilar e instalar aplicativos GNU / Linux em sistemas operacionais Linux ou BSD usando apenas o arquivo de origem do respectivo programa. No entanto, os usuários não precisam interagir com o compilador, pois isso é feito automaticamente pelos scripts configure e make.

O projeto também inclui bibliotecas para várias linguagens de programação, como libstdc e libgcj, e como a maioria dos softwares GNU, ele deve ser configurado antes de poder ser construído e instalado em seu computador.

Ele também pode exibir o caminho completo para uma biblioteca específica, pastas no caminho de pesquisa do compilador, caminho completo para um componente específico, diretório de bibliotecas de destino, sufixo sysroot usado para localizar cabeçalhos e triplet GNU normalizado do destino.

Além disso, existem várias outras opções para passar determinadas opções e argumentos separados por vírgula para o assembler, pré-processador e vinculador, compilar e montar sem vincular, criar uma biblioteca compartilhada e muitos outros.


Projetado para o sistema operacional GNU

Sendo originalmente escrito como o principal compilador para o sistema operacional GNU, o GCC (GNU Compiler Collection) foi desenvolvido para ser um software 100% gratuito e é instalado por padrão em qualquer distribuição Linux.

O software também é usado por desenvolvedores de código aberto para compilar seus programas. A linha de comando vem com várias opções, entre as quais podemos mencionar a capacidade de exibir o processador de destino do compilador, bem como o caminho relativo para as bibliotecas do SO.


Linha de fundo

Em suma, o GCC é um dos componentes mais essenciais de qualquer sistema operacional GNU / Linux. Não só isso, nem sequer podemos imaginar um mundo sem ele, mas o GCC é a principal razão por trás de todo o ecossistema de código aberto.

O que há de novo nesta versão:

  • O GCC 7.3 é um lançamento de correções de bugs do GCC 7, contendo correções importantes para regressões e bugs sérios no GCC 7.2, com mais de 99 bugs corrigidos desde o lançamento anterior.
  • Esta versão inclui opções de geração de código para mitigar a Variante 2 do Spectre 2 (CVE 2017-5715) para as metas x86 e powerpc.

O que há de novo na versão 8.1.0:

  • O GCC 7.3 é uma versão de correção de bugs do Filial do GCC 7 contendo correções importantes para regressões e bugs sérios no GCC 7.2 com mais de 99 bugs corrigidos desde o lançamento anterior.
  • Esta versão inclui opções de geração de código para mitigar a Variante 2 do Spectre 2 (CVE 2017-5715) para as metas x86 e powerpc.

O que há de novo na versão:

  • O GCC 7.1 é uma versão principal que contém uma nova funcionalidade substancial não disponível no GCC 6.x ou em versões anteriores do GCC. O frontend do C ++ agora tem suporte experimental para todo o rascunho atual do C ++ 17, com as opções -std = c ++ 1z e -std = gnu ++ 1z, e a biblioteca libstdc ++ tem a maior parte do rascunho do C ++ 17 recursos de biblioteca implementados também. Isso libera vários aprimoramentos nos diagnósticos emitidos, incluindo locais aprimorados, faixas de localização, sugestões de identificadores com erros ortográficos, nomes de opções, dicas de correção e vários novos avisos foram adicionados. Os otimizadores foram aprimorados, com melhorias aparecendo em todas as otimizações intra e interprocessuais, otimizações de tempo de link e vários backends de destino, incluindo, mas não se limitando a adições de passagem de mesclagem de loja, otimização de içamento de código, divisão de loop e encolhimento envolvendo melhorias. O Address Sanitizer agora pode relatar o uso de variáveis ​​depois de deixar seu escopo. O GCC agora pode ser configurado para o descarregamento do OpenMP 4.5 para GPGPUs NVidia PTX.

O que há de novo na versão 6.3.0:

  • O GCC 6.3 é um lançamento de correções de bugs do GCC 6, contendo correções importantes para regressões e bugs sérios no GCC 6.2, com mais de 79 bugs corrigidos desde o lançamento anterior.

O que há de novo na versão 6.2.0:

  • Esta versão é uma versão de correção de bugs, contendo correções para regressões no GCC 5.2 em relação às versões anteriores do GCC.

O que há de novo na versão 6.1.0:

  • Esta versão é uma versão de correção de bugs, contendo correções para regressões no GCC 5.2 em relação às versões anteriores do GCC.

O que há de novo na versão 5.3.0:

  • Esta versão é uma versão de correção de bugs, contendo correções para regressões no GCC 5.2 em relação às versões anteriores do GCC.

O que há de novo na versão 5.2.0:

  • Esta versão é uma versão de correção de erros, contendo correções para regressões no GCC 5.1 em relação a versões anteriores do GCC.

O que há de novo na versão 5.1.0:

  • O front-end do C ++ agora tem suporte total a linguagem C ++ 14 e o Standard C ++ Library tem suporte completo para C ++ 11 e suporte experimental completo para C ++ 14. O suporte completo do C ++ 11 foi possível graças à adoção da ABI Dual, consulte https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html para obter mais detalhes.
  • O front end C agora é padronizado para o modo C11 com extensões GNU, o que afeta a semântica da palavra-chave inline e traz várias outras alterações visíveis ao usuário, veja https://gcc.gnu.org/gcc-5/porting_to.html para mais detalhes.
  • O GCC 5.1 contém várias melhorias de otimização interprocedural, por ex. um novo passe dobrável de código idêntico do IPA e vários melhoramentos do LTO, por ex. Com base na fusão ODR de tipos C ++, consulte http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html para obter mais detalhes.
  • O Alocador de Registro Local do GCC 5.1 agora contém um subpassado de rematerialização, em i? 86 / x86-64 é capaz de reutilizar o registro rígido PIC para melhorar o desempenho de código independente de posição, há uma passagem RA interprocedural simples e vários outros registros melhorias de alocação foram adicionadas.
  • O GCC 5.1 adiciona suporte parcial ao padrão OpenACC, suporte para descarregamento do OpenMP 4.0 para os próximos aceleradores Xeon Phi da Intel e suporte para descarregamento do OpenACC para o PTX. O Desinfetante de Comportamento Indefinido no GCC foi estendido adicionando várias novas verificações de tempo de execução. Uma biblioteca experimental do JCC do GCC foi adicionada no GCC 5.1.

O que há de novo na versão 4.8.4:

  • Melhorias gerais do otimizador:
  • AddressSanitizer, um detector de erros de memória rápida, está agora disponível no ARM.
  • UndefinedBehaviorSanitizer (ubsan), um detector de comportamento rápido indefinido, foi adicionado e pode ser ativado via -fsanitize = undefined. Vários cálculos serão instrumentados para detectar comportamento indefinido em tempo de execução. O UndefinedBehaviorSanitizer está atualmente disponível para os idiomas C e C ++.
  • Melhorias na otimização de tempo de link (LTO):
  • A mesclagem de tipo foi reescrita. A nova implementação é significativamente mais rápida e usa menos memória.
  • Melhor algoritmo de particionamento, resultando em menos fluxo durante o tempo de link.
  • A remoção antecipada de métodos virtuais reduz o tamanho dos arquivos de objeto e melhora o uso da memória de tempo de link e o tempo de compilação.
  • Os corpos de funções agora são carregados sob demanda e liberados no início, melhorando o uso geral da memória no momento do link.

  • Os
  • métodos ocultos de C ++ agora podem ser otimizados.
  • Ao usar um plug-in do vinculador, a compilação com a opção -flto agora gera arquivos de objeto slim (.o) que contêm apenas uma representação de idioma intermediário para LTO. Use -ffat-lto-objects para criar arquivos que contenham adicionalmente o código do objeto. Para gerar bibliotecas estáticas adequadas para o processamento de LTO, use gcc-ar e gcc-ranlib; Para listar símbolos de um arquivo de objeto slim, use gcc-nm. (Isso requer que ar, ranlib e nm tenham sido compilados com suporte a plugins.)
  • O uso de memória que cria o Firefox com a depuração ativada foi reduzido de 15 GB para 3,5 GB; tempo de link de 1700 segundos a 350 segundos.
  • Melhorias de otimização entre procedimentos:
  • Novo módulo de análise de herança de tipos que melhora a desvirtualização. A devirtualização agora leva em conta espaços de nomes anônimos e a palavra-chave final do C ++ 11.
  • Nova passagem de devirtualização especulativa (controlada por -fdevirtualize-speculatively.
  • As chamadas feitas de forma especulativa direta são voltadas para indiretas, onde a ligação direta não é mais barata.
  • Os aliases locais são introduzidos para símbolos que são semanticamente equivalentes em bibliotecas compartilhadas, melhorando os tempos de vinculação dinâmica.
  • Melhorias na otimização dirigida por comentários:
  • A criação de perfil de programas usando funções inline C ++ agora é mais confiável.
  • Novo perfil de tempo determina a ordem típica em que as funções são executadas.
  • Um novo passe de reordenamento de funções (controlado por funções -freorder) reduz significativamente o tempo de inicialização de aplicativos grandes. Até que o suporte do binutils seja concluído, ele é efetivo apenas com a otimização do tempo de link.
  • Remoção e desvirtualização de chamadas indiretas orientadas a comentários agora lidam com chamadas entre módulos quando a otimização de tempo de link é ativada.
  • Novas melhorias específicas de idiomas e idiomas:
  • A versão 4.0 da especificação OpenMP agora é suportada nos compiladores C e C ++ e começa com a versão 4.9.1 também no compilador Fortran. A nova opção -fopenmp-simd pode ser usada para habilitar as diretivas SIMD do OpenMP, enquanto ignora outras diretivas do OpenMP. A nova opção -fsimd-cost-model = permite ajustar o modelo de custo de vetorização para loops anotados com as diretivas do OpenMP e do Cilk Plus; -Wopenmp-simd avisa quando o modelo de custo atual substitui as diretivas simd definidas pelo usuário.
  • A opção -Wdate-time foi adicionada para os compiladores C, C ++ e Fortran, que avisa quando as macros __DATE__, __TIME__ ou __TIMESTAMP__ são usadas. Essas macros podem evitar compilações reproduzíveis idênticas em bits.
  • Ada:
  • O GNAT mudou para o Ada 2012 em vez do Ada 2005 por padrão.
  • Família C:
  • Foi adicionado suporte para diagnósticos de colorização emitidos pelo GCC. O -fdiagnostics-color = auto irá ativá-lo quando a saída para os terminais, -fdiagnostics-color = sempre incondicionalmente. A variável de ambiente GCC_COLORS pode ser usada para personalizar as cores ou desabilitar a coloração. Se a variável GCC_COLORS estiver presente no ambiente, o padrão é -fdiagnostics-color = auto, caso contrário, -fdiagnostics-color = never.
  • Exemplo de saída de diagnóstico:
  • $ g ++ -fdiagnostics-color = sempre -S -Wall test.C
  • test.C: Na função & lsquo; int foo () ':
  • teste.C: 1: 14: aviso: nenhuma declaração de retorno na função retornando não-vazios [-Withurn-type]
  • int foo () {}
  • teste.C: 2: 46: erro: a profundidade de instanciação do modelo excede o máximo de 900 (use -ftemplate-depth = para aumentar o máximo) instanciando a "X"
  • modelo struct X {estático int valor int = X :: valor; }; modelo struct X;
  • teste.C: 2: 46: exigido recursivamente de & lsquo; const int X :: valor '
  • teste.C: 2: 46: exigido de & lsquo; const int X :: valor '
  • teste.C: 2: 88: necessário daqui
  • teste.C: 2: 46: erro: tipo incompleto & lsquo; X 'usado no especificador de nome aninhado
  • Com o novo #pragma GCC ivdep, o usuário pode afirmar que não há dependências transportadas por loop que impeçam a execução simultânea de iterações consecutivas usando instruções SIMD (instrução única de múltiplos dados).
  • O suporte para o Cilk Plus foi adicionado e pode ser ativado com a opção -fcilkplus. Cilk Plus é uma extensão das linguagens C e C ++ para suportar paralelismo de dados e tarefas. A presente implementação segue a versão 1.2 do ABI; todos os recursos, mas _Cilk_for foram implementados.
  • Atomizadores ISO C11 (o especificador e qualificador do tipo _Atomic e o cabeçalho) agora são suportados.
  • As seleções genéricas ISO C11 (palavra-chave _Generic) agora são suportadas.
  • O armazenamento local de encadeamentos do ISO C11 (_Thread_local, semelhante ao GNU C __thread) agora é suportado.
  • O suporte a ISO C11 agora está em um nível semelhante de integridade ao suporte a ISO C99: bugs de modulo substancialmente completos, identificadores estendidos (suportados exceto para casos de canto quando identificadores -extendidos são usados), problemas de ponto flutuante (principalmente mas não inteiramente relativa às características opcionais C99 dos anexos F e G) e aos anexos facultativos K (interfaces de verificação dos limites) e L (capacidade de análise).
  • Uma nova extensão C __auto_type fornece um subconjunto da funcionalidade do C ++ 11 auto no GNU C.
  • C ++:
  • A implementação G ++ da dedução do tipo de retorno C ++ 1y para funções normais foi atualizada para estar em conformidade com o N3638, a proposta aceita no documento de trabalho. Mais notavelmente, ele adiciona decltype (auto) para obter a semântica de decltype em vez da semântica de dedução de argumento de modelo de auto simples:
  • int & amp; f ();
  • auto i1 = f (); // int
  • decltype (auto) i2 = f (); // int & amp;
  • G ++ suporta inicializadores de captura lambda C ++ 1y:
  • [x = 42] {...};
  • Na verdade, eles foram aceitos desde o GCC 4.5, mas agora o compilador não avisa sobre eles com -std = c ++ 1y, e também suporta inicializadores entre parênteses e entre colchetes.
  • O G ++ suporta matrizes de comprimento variável C ++ 1y. O G ++ suportou VLAs estilo GNU / C99 por um longo tempo, mas agora suporta adicionalmente inicializadores e captura lambda por referência. No modo C ++ 1y, o G ++ irá reclamar sobre usos de VLA que não são permitidos pelo padrão de detalhamento, como formar um ponteiro para o tipo VLA ou aplicar sizeof a uma variável VLA. Observe que agora parece que os VLAs não farão parte do C ++ 14, mas farão parte de um documento separado e, em seguida, talvez do C ++ 17.
  • void f (int n) {
  • int a [n] = {1, 2, 3}; // lança std :: bad_array_length se n & lt; 3
  • [& amp; a] {para (int i: a) {cout

O que há de novo na versão 4.9.1:

  • O GCC 4.9.1 é uma versão de correção de bugs do ramo GCC 4.9 contendo correções importantes para regressões e bugs sérios no GCC 4.9.0 com mais de 88 bugs corrigidos desde o lançamento anterior. Além disso, a versão GCC 4.9.1 suporta o OpenMP 4.0 também em Fortran, em vez de apenas em C e C ++.

O que há de novo na versão 4.9.0:

  • Melhorias gerais do otimizador:
  • AddressSanitizer, um detector de erros de memória rápida, está agora disponível no ARM.
  • UndefinedBehaviorSanitizer (ubsan), um detector de comportamento rápido indefinido, foi adicionado e pode ser ativado via -fsanitize = undefined. Vários cálculos serão instrumentados para detectar comportamento indefinido em tempo de execução. O UndefinedBehaviorSanitizer está atualmente disponível para os idiomas C e C ++.
  • Melhorias na otimização de tempo de link (LTO):
  • A mesclagem de tipo foi reescrita. A nova implementação é significativamente mais rápida e usa menos memória.
  • Melhor algoritmo de particionamento, resultando em menos fluxo durante o tempo de link.
  • A remoção antecipada de métodos virtuais reduz o tamanho dos arquivos de objeto e melhora o uso da memória de tempo de link e o tempo de compilação.
  • Os corpos de funções agora são carregados sob demanda e liberados no início, melhorando o uso geral da memória no momento do link.

  • Os
  • métodos ocultos de C ++ agora podem ser otimizados.
  • Ao usar um plug-in do vinculador, a compilação com a opção -flto agora gera arquivos de objetos slim (.o) que contêm apenas representação de idioma intermediário para LTO. Use -ffat-lto-objects para criar arquivos que contenham adicionalmente o código do objeto. Para gerar bibliotecas estáticas adequadas para o processamento de LTO, use gcc-ar e gcc-ranlib; Para listar símbolos de um arquivo de objeto slim, use gcc-nm. (Requer que ar, ranlib e nm tenham sido compilados com suporte a plugins.)
  • O uso de memória que cria o Firefox com a depuração ativada foi reduzido de 15 GB para 3,5 GB; tempo de link de 1700 segundos a 350 segundos.
  • Melhorias de otimização entre procedimentos:
  • Novo módulo de análise de herança de tipos que melhora a desvirtualização. A devirtualização agora leva em conta espaços de nomes anônimos e a palavra-chave final do C ++ 11.
  • Nova passagem de devirtualização especulativa (controlada por -fdevirtualize-speculatively.
  • As chamadas feitas de forma especulativa direta são voltadas para indiretas, onde a ligação direta não é mais barata.
  • Os aliases locais são introduzidos para símbolos que são semanticamente equivalentes em bibliotecas compartilhadas, melhorando os tempos de vinculação dinâmica.
  • Melhorias na otimização dirigida por comentários:
  • A criação de perfil de programas usando funções inline C ++ agora é mais confiável.
  • Novo perfil de tempo determina a ordem típica em que as funções são executadas.
  • Um novo passe de reordenamento de funções (controlado por funções -freorder) reduz significativamente o tempo de inicialização de aplicativos grandes. Até que o suporte do binutils seja concluído, ele é efetivo apenas com a otimização do tempo de link.
  • Remoção e desvirtualização de chamadas indiretas orientadas a comentários agora lidam com chamadas entre módulos quando a otimização de tempo de link é ativada.
  • Novas melhorias específicas de idiomas e idiomas:
  • A versão 4.0 da especificação OpenMP agora é suportada para os compiladores C e C ++. A nova opção -fopenmp-simd pode ser usada para habilitar as diretivas SIMD do OpenMP, enquanto ignora outras diretivas do OpenMP. A nova opção -fsimd-cost-model = permite ajustar o modelo de custo de vetorização para loops anotados com as diretivas do OpenMP e do Cilk Plus; -Wopenmp-simd avisa quando o modelo de custo atual sobrescreve as diretivas simd definidas pelo usuário.
  • A opção -Wdate-time foi adicionada para os compiladores C, C ++ e Fortran, que avisa quando as macros __DATE__, __TIME__ ou __TIMESTAMP__ são usadas. Essas macros podem evitar compilações reproduzíveis idênticas em bits.
  • Ada:
  • O GNAT mudou para o Ada 2012 em vez do Ada 2005 por padrão.
  • Família C:
  • Foi adicionado suporte para diagnósticos de colorização emitidos pelo GCC. O -fdiagnostics-color = auto irá ativá-lo quando a saída para os terminais, -fdiagnostics-color = sempre incondicionalmente. A variável de ambiente GCC_COLORS pode ser usada para personalizar as cores ou desabilitar a coloração. Se a variável GCC_COLORS estiver presente no ambiente, o padrão é -fdiagnostics-color = auto, caso contrário, -fdiagnostics-color = never.
  • Exemplo de saída de diagnóstico:
  • $ g ++ -fdiagnostics-color = sempre -S -Wall test.C
  • test.C: Na função & lsquo; int foo () ':
  • teste.C: 1: 14: aviso: nenhuma declaração de retorno na função retornando não-vazios [-Withurn-type]
  • int foo () {}
  • teste.C: 2: 46: erro: a profundidade de instanciação do modelo excede o máximo de 900 (use -ftemplate-depth = para aumentar o máximo) instanciando a "X"
  • modelo struct X {estático int valor int = X :: valor; }; modelo struct X;
  • teste.C: 2: 46: exigido recursivamente de & lsquo; const int X :: valor '
  • teste.C: 2: 46: exigido de & lsquo; const int X :: valor '
  • teste.C: 2: 88: necessário daqui
  • teste.C: 2: 46: erro: tipo incompleto & lsquo; X 'usado no especificador de nome aninhado
  • Com o novo #pragma GCC ivdep, o usuário pode afirmar que não há dependências transportadas por loop que impeçam a execução simultânea de iterações consecutivas usando instruções SIMD (instrução única de múltiplos dados).
  • O suporte para o Cilk Plus foi adicionado e pode ser ativado com a opção -fcilkplus. Cilk Plus é uma extensão das linguagens C e C ++ para suportar paralelismo de dados e tarefas. A presente implementação segue a versão 1.2 do ABI; todos os recursos, mas _Cilk_for foram implementados.
  • Atomizadores ISO C11 (o especificador e qualificador do tipo _Atomic e o cabeçalho) agora são suportados.
  • As seleções genéricas ISO C11 (palavra-chave _Generic) agora são suportadas.
  • O armazenamento local de encadeamentos do ISO C11 (_Thread_local, semelhante ao GNU C __thread) agora é suportado.
  • O suporte a ISO C11 agora está em um nível semelhante de integridade ao suporte a ISO C99: bugs de modulo substancialmente completos, identificadores estendidos (suportados exceto para casos de canto quando identificadores -extendidos são usados), problemas de ponto flutuante (principalmente mas não inteiramente relativa às características opcionais C99 dos anexos F e G) e aos anexos facultativos K (interfaces de verificação dos limites) e L (capacidade de análise).
  • Uma nova extensão C __auto_type fornece um subconjunto da funcionalidade do C ++ 11 auto no GNU C.
  • C ++:
  • A implementação G ++ da dedução do tipo de retorno C ++ 1y para funções normais foi atualizada para estar em conformidade com o N3638, a proposta aceita no documento de trabalho. Mais notavelmente, ele adiciona decltype (auto) para obter a semântica de decltype em vez da semântica de dedução de argumento de modelo de auto simples:
  • int & amp; f ();
  • auto i1 = f (); // int
  • decltype (auto) i2 = f (); // int & amp;
  • G ++ suporta inicializadores de captura lambda C ++ 1y:
  • [x = 42] {...};
  • Na verdade, eles foram aceitos desde o GCC 4.5, mas agora o compilador não avisa sobre eles com -std = c ++ 1y, e também suporta inicializadores entre parênteses e entre colchetes.
  • O G ++ suporta matrizes de comprimento variável C ++ 1y. O G ++ suportou VLAs estilo GNU / C99 por um longo tempo, mas agora suporta adicionalmente inicializadores e captura lambda por referência. No modo C ++ 1y, o G ++ irá reclamar sobre usos de VLA que não são permitidos pelo padrão de detalhamento, como formar um ponteiro para o tipo VLA ou aplicar sizeof a uma variável VLA. Observe que agora parece que os VLAs não farão parte do C ++ 14, mas farão parte de um documento separado e, em seguida, talvez do C ++ 17.
  • void f (int n) {
  • int a [n] = {1, 2, 3}; // lança std :: bad_array_length se n & lt; 3
  • [& amp; a] {para (int i: a) {cout

Programas semelhantes

Aubit 4GL compiler
Aubit 4GL compiler

20 Feb 15

Alice ML
Alice ML

2 Jun 15

Node.js
Node.js

17 Aug 18

Tcl/Tk
Tcl/Tk

20 Jan 18

Comentário para GCC

1 Comentários
  • http://www.eduwizzonlinetrainings.com 29 Dec 17
    EduwizzOnlineTraining is one of the Best Online Training Institute in Hyderabad, Bangalore. Eduwizz provide courses like Hybris Development, WebSphere Commerce Server,Blockchain Training,Hyperledger Fabric Development ,Ethereum Development ,Commvault Training, Devops , Netapps , Mulesoft ESB ,Machine Learning,Data Science , Internet of Things , Hybris ,Angular JS , Node JS , Express JS , Business Analyst, Selenium testing with webdriver, Guidewire ,Adobe, RPA ,TSM, EMC...etc
Adicionar comentário
Ligue imagens!