GCC (GNU Compiler Collection) er en åpen kildekode kommandolinjeprogramvare utviklet for å fungere som en kompilator for GNU / Linux og BSD-baserte operativsystemer. Den inkluderer frontender for mange programmeringsspråk, inkludert Objective-C, Go, C ++, Java, C, Ada og Fortran.
Funksjoner med et blikk
Med GCC kan du konfigurere, kompilere og installere GNU / Linux-applikasjoner i Linux- eller BSD-operativsystemer, og bruk bare kildearkivet til det respektive programmet. Brukerne trenger imidlertid ikke å samhandle med kompilatoren, da dette gjøres automatisk ved å konfigurere og lage skript.
Prosjektet inneholder også biblioteker for ulike programmeringsspråk, for eksempel libstdc og libgcj, og som de fleste GNU-programvare, må den konfigureres før den kan bygges og installeres på datamaskinen.
Det kan også vise hele banen til et bestemt bibliotek, mapper i kompilators søkevei, full bane til en bestemt komponent, målbibliotekskatalog, sysroot-suffiks som brukes til å finne overskrifter og målets normaliserte GNU-trippel.
I tillegg er det forskjellige alternativer for å overføre bestemte kommaseparerte alternativer og argumenter til assembler, preprocessor og linker, kompilere og samle uten å koble sammen, opprette et delt bibliotek og mange andre.
Designet for GNU-operativsystemet
Originalt skrevet som hovedkompilator for GNU-operativsystemet, ble GCC (GNU Compiler Collection) utviklet for å være 100% fri programvare, og den er som standard installert på en hvilken som helst Linux-distribusjon.
Programvaren brukes også av Open Source-utviklere til å kompilere sine programmer. Kommandolinjen kommer med flere alternativer, blant annet kan vi nevne muligheten til å vise kompilators målprosessor, samt den relative banen til OS-biblioteker.
Bunnlinjen
Alt i alt er GCC en av de viktigste komponentene i et hvilket som helst GNU / Linux operativsystem. Ikke bare at vi ikke kan forestille oss en verden uten det, men GCC er hovedårsaken bak hele Open Source-økosystemet.
Hva er nytt? i denne versjonen:
- GCC 7.3 er en feilrettingsfrigivelse fra GCC 7-grenen som inneholder viktige korrigeringer for regressjoner og alvorlige feil i GCC 7.2 med mer enn 99 feil som er løst siden forrige utgave.
- Denne utgaven inkluderer kodegenereringsalternativer for å redusere Specter Variant 2 (CVE 2017-5715) for x86- og powerpc-målene.
Hva er nytt i versjon 8.1.0:
- GCC 7.3 er en feilrettingsfrigivelse fra GCC 7-grenen inneholder viktige korrigeringer for regressjoner og alvorlige feil i GCC 7.2 med mer enn 99 feil som er løst siden forrige utgave.
- Denne utgaven inkluderer kodegenereringsalternativer for å redusere Specter Variant 2 (CVE 2017-5715) for x86- og powerpc-målene.
Hva er nytt i versjon:
- GCC 7.1 er en stor utgave som inneholder betydelig ny funksjonalitet som ikke er tilgjengelig i GCC 6.x eller tidligere GCC utgivelser. C ++ frontend har nå eksperimentell støtte for alle de nåværende C ++ 17-utkastene, med alternativene -std = c ++ 1z og -std = gnu ++ 1z, og libstdc ++-biblioteket har det meste av C ++ 17-utkastet bibliotek funksjoner også implementert. Disse utgivelsene inneholder forskjellige forbedringer i den utstrålede diagnostikken, inkludert forbedrede steder, plasseringsområder, forslag til feilstavede identifikatorer, alternativnavn, fikseringshint og ulike nye advarsler er lagt til. Optimatorene har blitt forbedret, med forbedringer som vises i alle intra- og interprosessoroptimaliseringer, koblingstidoptimaliseringer og ulike målbackender, inkludert, men ikke begrenset til, tillegg av butikkfusjonspass, kodeløftoptimalisering, sløyfespalting og krymping. innpakning forbedringer. Adresse Sanitizer kan nå rapportere bruken av variabler etter å ha forlatt deres omfang. GCC kan nå konfigureres for OpenMP 4.5-avlasting til NVidia PTX GPGPUs.
Hva er nytt i versjon 6.3.0:
- GCC 6.3 er en bugfix-frigivelse fra GCC 6-grenen som inneholder viktige korrigeringer for regressjoner og alvorlige feil i GCC 6.2 med mer enn 79 feil som er løst siden forrige utgave.
Hva er nytt i versjon 6.2.0:
- Denne utgivelsen er en feilrettingsfrigivelse, som inneholder korrigeringer for regressjoner i GCC 5.2 i forhold til tidligere utgivelser av GCC.
Hva er nytt i versjon 6.1.0:
- Denne utgivelsen er en feilrettingsfrigivelse, som inneholder korrigeringer for regressjoner i GCC 5.2 i forhold til tidligere utgivelser av GCC.
Hva er nytt i versjon 5.3.0:
- Denne utgivelsen er en feilrettingsfrigivelse, som inneholder korrigeringer for regressjoner i GCC 5.2 i forhold til tidligere utgivelser av GCC.
Hva er nytt i versjon 5.2.0:
- Denne utgaven er en feilsøkingsutgivelse, som inneholder korrigeringer for regresjoner i GCC 5.1 i forhold til tidligere utgivelser av GCC.
Hva er nytt i versjon 5.1.0:
- C ++-fronten har nå full C ++ 14 språkstøtte, og Standard C ++-biblioteket har full C ++ 11-støtte og eksperimentell full C ++ 14-støtte. Den fulle C + + 11-støtten har blitt gjort mulig ved å vedta Dual ABI, se https://gcc.gnu.org/onlinedocs/libstdc++/manual/using_dual_abi.html for flere detaljer.
- C-fronten er nå standard til C11-modus med GNU-utvidelser, som påvirker semantikken til inline-søkeordet, og bringer flere andre brukere synlige endringer, se https://gcc.gnu.org/gcc-5/porting_to.html for flere detaljer.
- GCC 5.1 inneholder forskjellige interprocedural optimaliseringsforbedringer, f.eks. et nytt IPA Identical Code Folding-pass og ulike LTO-forbedringer, f.eks. ODR-basert sammenslåing av C ++-typer, se http://hubicka.blogspot.cz/2015/04/GCC5-IPA-LTO-news.html for flere detaljer.
- GCC 5.1 Local Register Allocator inneholder nå en rematerialisering-subpass, på I? 86 / x86-64 kan du gjenopprette PIC-hardregisteret for å forbedre ytelsen til uavhengig posisjonskode, det er et enkelt interprocedural RA-pass og forskjellige andre register tildelingsforbedringer ble lagt til.
- GCC 5.1 legger til delvis støtte for OpenACC-standarden, støtte for OpenMP 4.0-avlasting til Intels kommende Xeon Phi-akseleratorer og støtte for OpenACC-avlastning til PTX. Undefined Behavior Sanitizer i GCC har blitt utvidet ved å legge til forskjellige nye runtime kontroller. Et eksperimentelt GCC JIT-bibliotek er lagt til i GCC 5.1.
Hva er nytt i versjon 4.8.4:
- Generelle forbedringer for forbedringer:
- AddressSanitizer, en rask minnefeil detektor, er nå tilgjengelig på ARM.
- UndefinedBehaviorSanitizer (ubsan), en rask udefinert atferdsdetektor, er lagt til og kan aktiveres via -fsanitize = undefined. Ulike beregninger vil bli instrumentert til å oppdage udefinert oppførsel ved kjøring. UndefinedBehaviorSanitizer er for øyeblikket tilgjengelig for C og C ++-språkene.
- Forbedringer i Link-Time Optimization (LTO):
- Type sammenslåing ble omskrevet. Den nye implementeringen er betydelig raskere og bruker mindre minne.
- Bedre partisjoneringsalgoritme som resulterer i mindre streaming under koblingstid.
- Tidlig fjerning av virtuelle metoder reduserer størrelsen på objektfiler og forbedrer koblingstidsminnebruk og kompilerer tid.
- Funksjonsorganer lastes nå på forespørsel og frigjøres tidlig, og forbedrer generell minnebruk ved koblingstid.
- C ++ skjulte nøkkelord kan nå optimaliseres ut.
- Når du bruker et linker-plugin, genererer kompilering med -flto-alternativet nå små objektfiler (.o) som bare inneholder mellomliggende språkrepresentasjon for LTO. Bruk -ffat-lto-objekter for å lage filer som inneholder i tillegg objektkoden. For å generere statiske biblioteker som er egnet for LTO-prosessering, bruk gcc-ar og gcc-ranlib; å liste symboler fra en slank objektfil bruker gcc-nm. (Dette krever at ar, ranlib og nm er blitt kompilert med plugin-støtte.)
- Minnebruk bygg Firefox med feilsøking ble redusert fra 15 GB til 3,5 GB; koblingstid fra 1700 sekunder til 350 sekunder.
- Inter-prosessuelle optimaliseringsforbedringer:
- Ny type arv analysemodul forbedrer devirtualization. Devirtualization tar nå hensyn til anonyme navn-mellomrom og C + + 11-siste søkeord.
- Ny spekulativ devirtualisering pass (kontrollert av -fdevirtualize-spekulativt.
- Samtaler som ble spekulativt gjort direkte, går tilbake til indirekte hvor direkte anrop ikke er billigere.
- Lokale aliaser blir introdusert for symboler som er kjent som semantisk likeverdige på tvers av delte biblioteker som forbedrer dynamiske koblingstider.
- Tilbakemelding rettet optimalisering:
- Profilering av programmer som bruker C ++ inline-funksjoner, er nå mer pålitelig.
- Ny tidprofilering bestemmer typisk rekkefølge som funksjoner utføres.
- En ny funksjon ompasningspasning (kontrollert av -freorder-funksjoner) reduserer signifikant oppstartstid for store applikasjoner. Inntil binutils-støtten er fullført, er den bare effektiv med koblingstidsoptimalisering.
- Tilbakemeldingsdrevet indirekte anrops fjerning og devirtualisering håndterer nå kryssmodulanrop når koblingstidsoptimalisering er aktivert.
- Nye språk og språklige forbedringer:
- Versjon 4.0 av OpenMP-spesifikasjonen støttes nå i C- og C ++-kompilatene og starter med 4.9.1-utgivelsen også i Fortran-kompilatoren. Alternativet new-fopenmp-simd kan brukes til å aktivere OpenMPs SIMD-direktiver, mens du ignorerer andre OpenMP-direktiver. Den nye -fsimd-cost-model = alternativet tillater å stille vektormodelleringsmodellen for sløyfer merket med OpenMP og Cilk Plus simd-direktiver; -Wopenmp-simd advarer når den gjeldende kostnadsmodellen overstyrer SIMD-direktiver satt av brukeren.
- Alternativet -Vidatid er lagt til for C, C ++ og Fortran-kompilatørene, som advarer når __DATE__, __TIME__ eller __TIMESTAMP__-makroene brukes. Disse makroene kan forhindre bitvis-identiske, reproduserbare samlinger.
- Ada:
- GNAT byttet til Ada 2012 i stedet for Ada 2005 som standard.
- C-familie:
- Støtte for colorizing diagnostikk utstedt av GCC har blitt lagt til. -Fdiagnostics-color = auto vil aktivere den når du sender til terminaler, -fdiagnostics-color = alltid ubetinget. GCC_COLORS miljøvariabelen kan brukes til å tilpasse fargene eller deaktivere fargene. Hvis GCC_COLORS-variabelen er tilstede i miljøet, er standard -fdiagnostics-color = auto, ellers -fdiagnostics-color = never.
- Eksempel på diagnostikkutgang:
- $ g ++ -fdiagnostics-color = always -S -Wall test.C
- test.C: I funksjon & lsquo; int foo () ':
- test.C: 1: 14: advarsel: ingen returoppgave i funksjon som returnerer ikke-ugyldig [-Wreturn-type]
- int foo () {}
- test.c: 2: 46: error: mal instantiation dybden overstiger maksimalt 900 (bruk -ftemplate-dybde = for å øke den maksimale) Instantiating & quot; struct X '
- malstrukturen X {statisk const int verdi = X :: verdi; }; template struct X;
- test.C: 2: 46: rekursivt kreves fra & lsquo; const int X :: verdi '
- test.C: 2: 46: kreves fra & lsquo; const int X :: verdi '
- test.C: 2: 88: kreves herfra
- test.C: 2: 46: feil: ufullstendig type "X" brukt i nestet navnespesifikke
- Med den nye #pragma GCC ivdep kan brukeren hevde at det ikke finnes løpebaserte avhengigheter som ville hindre samtidig utførelse av sammenhengende iterasjoner ved hjelp av SIMD-instruksjoner (single instruction multiple data).
- Støtte for Cilk Plus er lagt til og kan aktiveres med alternativet -fcilkplus. Cilk Plus er en utvidelse av C og C ++-språkene for å støtte data og oppgaveparallellisme. Den nåværende implementeringen følger ABI versjon 1.2; alle funksjoner, men _Cilk_for har blitt implementert.
- ISO C11 atomics (_Atomic type spesifiserer og kvalifiserer og topptekst) støttes nå.
- Generelle valg av ISO C11 (_Generisk søkeord) støttes nå.
- ISO C11 tråd-lokal lagring (_Thread_local, ligner GNU C __thread) støttes nå.
- ISO C11-støtten er nå på samme nivå som fullstendighet til ISO C99-støtte: vesentlig komplette modulo-feil, utvidede identifikatorer (støttes bortsett fra hjørne tilfeller når -fxtended-identifikatorer brukes), flytende punktproblemer (hovedsakelig men ikke helt relatert til valgfrie C99-funksjoner fra vedlegg F og G) og de valgfrie vedleggene K (Bound-checking-grensesnitt) og L (Analyserbarhet).
- En ny C-utvidelse __auto_type gir en delmengde av funksjonaliteten til C ++ 11 auto i GNU C.
- C ++:
- G ++-implementeringen av C ++ 1y returtrekk for normale funksjoner har blitt oppdatert for å overholde N3638, forslaget godtas i arbeidspapiret. Mest sett legger det til decltype (auto) for å få decltype semantikk i stedet for template argument deduction semantikk av vanlig auto:
- int & Co. f ();
- auto i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ støtter C ++ 1y lambda capture initializers:
- [x = 42] {...};
- Faktisk er de blitt akseptert siden GCC 4.5, men nå advarer ikke kompilatoren om dem med -std = c ++ 1y, og støtter også parenteserte og brace-lukkede initialiserere.
- G ++ støtter C ++ 1y variabel lengde arrays. G ++ har støttet GNU / C99-stil VLAs i lang tid, men nå støtter i tillegg initiatorer og lambda-fangst ved referanse. I C ++ 1y-modus vil G ++ klage over VLA-bruksområder som ikke er tillatt av utkastet til standard, for eksempel å danne en peker til VLA-typen eller bruke sizeof til en VLA-variabel. Merk at det nå ser ut til at VLAs ikke vil være en del av C ++ 14, men vil være en del av et eget dokument og kanskje C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // kaster std :: bad_array_length hvis n & lt; 3
- [& a] {for (int i: a) {cout
Hva er nytt i versjon 4.9.1:
- GCC 4.9.1 er en bugfix-frigivelse fra GCC 4.9-grenen som inneholder viktige korrigeringer for regressioner og alvorlige feil i GCC 4.9.0 med mer enn 88 feil som er løst siden forrige utgave. I tillegg til dette støtter GCC 4.9.1-utgivelsen OpenMP 4.0 også i Fortran, i stedet for bare i C og C ++.
Hva er nytt i versjon 4.9.0:
- Generelle forbedringer for forbedringer:
- AddressSanitizer, en rask minnefeil detektor, er nå tilgjengelig på ARM.
- UndefinedBehaviorSanitizer (ubsan), en rask udefinert atferdsdetektor, er lagt til og kan aktiveres via -fsanitize = undefined. Ulike beregninger vil bli instrumentert til å oppdage udefinert oppførsel ved kjøring. UndefinedBehaviorSanitizer er for øyeblikket tilgjengelig for C og C ++-språkene.
- Forbedringer i Link-Time Optimization (LTO):
- Type sammenslåing ble omskrevet. Den nye implementeringen er betydelig raskere og bruker mindre minne.
- Bedre partisjoneringsalgoritme som resulterer i mindre streaming under koblingstid.
- Tidlig fjerning av virtuelle metoder reduserer størrelsen på objektfiler og forbedrer koblingstidsminnebruk og kompilerer tid.
- Funksjonsorganer lastes nå på forespørsel og frigjøres tidlig, og forbedrer generell minnebruk ved koblingstid.
- C ++ skjulte nøkkelord kan nå optimaliseres ut.
- Når du bruker et linker-plugin, genererer kompilere med -flto-alternativet nå tynne objekterfiler (.o) som bare inneholder mellomliggende språkrepresentasjon for LTO. Bruk -ffat-lto-objekter for å lage filer som inneholder i tillegg objektkoden. For å generere statiske biblioteker som er egnet for LTO-prosessering, bruk gcc-ar og gcc-ranlib; å liste symboler fra en slank objektfil bruker gcc-nm. (Krever at ar, ranlib og nm er kompilert med plugin-støtte.)
- Minnebruk bygg Firefox med feilsøking ble redusert fra 15 GB til 3,5 GB; koblingstid fra 1700 sekunder til 350 sekunder.
- Inter-prosessuelle optimaliseringsforbedringer:
- Ny type arv analysemodul forbedrer devirtualization. Devirtualization tar nå hensyn til anonyme navn-mellomrom og C + + 11-siste søkeord.
- Ny spekulativ devirtualisering pass (kontrollert av -fdevirtualize-spekulativt.
- Samtaler som ble spekulativt gjort direkte, går tilbake til indirekte hvor direkte anrop ikke er billigere.
- Lokale aliaser blir introdusert for symboler som er kjent som semantisk likeverdige på tvers av delte biblioteker som forbedrer dynamiske koblingstider.
- Tilbakemelding rettet optimalisering:
- Profilering av programmer som bruker C ++ inline-funksjoner, er nå mer pålitelig.
- Ny tidprofilering bestemmer typisk rekkefølge som funksjoner utføres.
- En ny funksjon ompasningspasning (kontrollert av -freorder-funksjoner) reduserer signifikant oppstartstid for store applikasjoner. Inntil binutils-støtten er fullført, er den bare effektiv med koblingstidsoptimalisering.
- Tilbakemeldingsdrevet indirekte anrops fjerning og devirtualisering håndterer nå kryssmodulanrop når koblingstidsoptimalisering er aktivert.
- Nye språk og språklige forbedringer:
- Versjon 4.0 av OpenMP-spesifikasjonen støttes nå for C og C ++-kompilatørene. Alternativet new-fopenmp-simd kan brukes til å aktivere OpenMPs SIMD-direktiver, mens du ignorerer andre OpenMP-direktiver. Den nye -fsimd-cost-model = alternativet tillater å stille vektormodelleringsmodellen for sløyfer merket med OpenMP og Cilk Plus simd-direktiver; -Wopenmp-simd advarer når den nåværende kostnadsmodellen overstyrer simd-direktiver satt av brukeren.
- Alternativet -Vidatid er lagt til for C, C ++ og Fortran-kompilatørene, som advarer når __DATE__, __TIME__ eller __TIMESTAMP__-makroene brukes. Disse makroene kan forhindre bitvis-identiske, reproduserbare samlinger.
- Ada:
- GNAT byttet til Ada 2012 i stedet for Ada 2005 som standard.
- C-familie:
- Støtte for colorizing diagnostikk utstedt av GCC har blitt lagt til. -Fdiagnostics-color = auto vil aktivere den når du sender til terminaler, -fdiagnostics-color = alltid ubetinget. GCC_COLORS miljøvariabelen kan brukes til å tilpasse fargene eller deaktivere fargene. Hvis GCC_COLORS-variabelen er tilstede i miljøet, er standard -fdiagnostics-color = auto, ellers -fdiagnostics-color = never.
- Eksempel på diagnostikkutgang:
- $ g ++ -fdiagnostics-color = always -S -Wall test.C
- test.C: I funksjon & lsquo; int foo () ':
- test.C: 1: 14: advarsel: ingen returoppgave i funksjon som returnerer ikke-ugyldig [-Wreturn-type]
- int foo () {}
- test.c: 2: 46: error: mal instantiation dybden overstiger maksimalt 900 (bruk -ftemplate-dybde = for å øke den maksimale) Instantiating & quot; struct X '
- malstrukturen X {statisk const int verdi = X :: verdi; }; template struct X;
- test.C: 2: 46: rekursivt kreves fra & lsquo; const int X :: verdi '
- test.C: 2: 46: kreves fra & lsquo; const int X :: verdi '
- test.C: 2: 88: kreves herfra
- test.C: 2: 46: feil: ufullstendig type "X" brukt i nestet navnespesifikke
- Med den nye #pragma GCC ivdep kan brukeren hevde at det ikke finnes løpebaserte avhengigheter som ville hindre samtidig utførelse av sammenhengende iterasjoner ved hjelp av SIMD-instruksjoner (single instruction multiple data).
- Støtte for Cilk Plus er lagt til og kan aktiveres med alternativet -fcilkplus. Cilk Plus er en utvidelse av C og C ++-språkene for å støtte data og oppgaveparallellisme. Den nåværende implementeringen følger ABI versjon 1.2; alle funksjoner, men _Cilk_for har blitt implementert.
- ISO C11 atomics (_Atomic type spesifiserer og kvalifiserer og topptekst) støttes nå.
- Generelle valg av ISO C11 (_Generisk søkeord) støttes nå.
- ISO C11 tråd-lokal lagring (_Thread_local, ligner GNU C __thread) støttes nå.
- ISO C11-støtten er nå på samme nivå som fullstendighet til ISO C99-støtte: vesentlig komplette modulo-feil, utvidede identifikatorer (støttes bortsett fra hjørne tilfeller når -fxtended-identifikatorer brukes), flytende punktproblemer (hovedsakelig men ikke helt relatert til valgfrie C99-funksjoner fra vedlegg F og G) og de valgfrie vedleggene K (Bound-checking-grensesnitt) og L (Analyserbarhet).
- En ny C-utvidelse __auto_type gir en delmengde av funksjonaliteten til C ++ 11 auto i GNU C.
- C ++:
- G ++-implementeringen av C ++ 1y returtrekk for normale funksjoner har blitt oppdatert for å overholde N3638, forslaget godtas i arbeidspapiret. Mest sett legger det til decltype (auto) for å få decltype semantikk i stedet for template argument deduction semantikk av vanlig auto:
- int & Co. f ();
- auto i1 = f (); // int
- decltype (auto) i2 = f (); // int & amp;
- G ++ støtter C ++ 1y lambda capture initializers:
- [x = 42] {...};
- Faktisk er de blitt akseptert siden GCC 4.5, men nå advarer ikke kompilatoren om dem med -std = c ++ 1y, og støtter også parenteserte og brace-lukkede initialiserere.
- G ++ støtter C ++ 1y variabel lengde arrays. G ++ har støttet GNU / C99-stil VLAs i lang tid, men nå støtter i tillegg initiatorer og lambda-fangst ved referanse. I C ++ 1y-modus vil G ++ klage over VLA-bruksområder som ikke er tillatt av utkastet til standard, for eksempel å danne en peker til VLA-typen eller bruke sizeof til en VLA-variabel. Merk at det nå ser ut til at VLAs ikke vil være en del av C ++ 14, men vil være en del av et eget dokument og kanskje C ++ 17.
- void f (int n) {
- int a [n] = {1, 2, 3}; // kaster std :: bad_array_length hvis n & lt; 3
- [& a] {for (int i: a) {cout
1 Kommentarer
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