GNU Compiler Collection: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Mr Hans (discussione | contributi)
mNessun oggetto della modifica
Corretto: "rispetto alla versione"
 
(159 versioni intermedie di oltre 100 utenti non mostrate)
Riga 1:
{{Software
{{stub software libero}}
|Nome = GNU Compiler Collection
{{Infobox_Software |
|Screenshot =
nome = GNU Compiler Collection|
|UltimaVersioneBeta =
screenshot = [[Image:GCC logo.png]] |
|DataUltimaVersioneBeta =
didascalia = Logo del compilatore |
|SistemaOperativo = multipiattaforma
sviluppatore = [[Free Software Foundation]] |
|Genere = compilatore
versione_ultimo_rilascio = 4.0.2 |
|Licenza = [[GNU General Public License|GNU GPL]]
data_ultimo_rilascio = [[28 settembre]], [[2005]] |
|SoftwareLibero = sì
sistema_operativo = [[Multi piattaforma]] |
|Lingua =
genere = [[Compilatore]] |
licenza = [[GPL]] |
sito_web = [http://gcc.gnu.org/ http://gcc.gnu.org] |
}}
 
'''GNU Compiler Collection''' o in breve '''GCC''' (in origine '''GNU C Compiler''') è un [[Compilatore con ottimizzatore|compilatore ottimizzante]] [[multipiattaforma]] creato inizialmente dal fondatore della Free Software Foundation, [[Richard Matthew Stallman]], come parte del [[Progetto GNU]]. Disponibile per vari linguaggi, architetture e sistemi operativi, GCC è distribuito in forma libera dalla [[Free Software Foundation]] tramite la [[GNU General Public License|licenza GPL]]. Le versioni recenti sono incluse nelle principali [[Distribuzione Linux|distribuzioni del sistema operativo GNU/Linux]], e di molti altri sistemi, mentre su [[macOS]] non è installato di base, ma è parte del pacchetto [[Xcode]], che dalla versione 5.0 comprende un altro compilatore, llvm, che sostituisce gcc.
La '''GNU Compiler Collection''' (solitamente abbreviata in '''GCC''') è un insieme di
[[Compilatore|compilatori]] creato inizialmente dall'[[hacker]] americano [[Richard Stallman]]
come parte del [[Sistema GNU]], un [[sistema operativo]] [[Software libero|libero]] compatibile con [[Unix]]. Le versioni recenti di GCC, sviluppate dalla comunità Open Source, sono incorporate nelle principali distribuzioni del sistema operativo [[GNU/Linux]], e di molti altri sistemi basati su fondamenta Unix, come per esempio [[Mac OS X]].
 
NataNato inizialmente come un compilatore per il [[C (linguaggio)|linguaggio C]] (il nome in origine era '''GNU C Compiler'''), GCC dispone oggi di vari ''[[front endfrontend]]'' per altri linguaggi, tra cui [[Java (linguaggio di programmazione)|Java]], [[C++]] , [[Objective_CObjective C]] , [[Fortran]] e [[Ada (linguaggio)|Ada]], ede èvari ''backend'' che sono in grado di generare eseguibililinguaggi macchina per molte [[Architettura_Architettura (hardwarecomputer)|architetture]], tra le quali [[Architettura x86|x86]] ([[intel]] compatibili), [[AMD64|x86 a -64 bit]], ([[AdvancedArchitettura Micro DevicesARM|AMDARM]]/intel a 64 bit), [[PowerPCIA-64]], [[s390PowerPC]], ([[IBMs390]]), [[SparcSPARC]] ([[Sun Microsystems]]).
 
== Storia ==
L'ultima versione rilasciata è la 4.1.2
GCC è stato creato nel [[1987]] da Richard Stallman come parte del sistema GNU, che aveva bisogno di un compilatore che fosse software libero. Il suo sviluppo è stato seguito da vicino dalla [[Free Software Foundation]].
 
Nel [[1997]] un gruppo di sviluppatori insoddisfatti dalla natura chiusa degli sviluppi e dal loro ritmo troppo lento ha creato il progetto [[EGCS]] (''Experimental/Enhanced GNU Compiler System''), che incorporava diversi [[Fork (sviluppo software)|fork]] sperimentali in una linea di sviluppo unica, separata da GCC. Lo sviluppo di [[EGCS]] si è dimostrato sufficientemente vitale e nell'aprile del [[1999]] EGCS è stato promosso al rango di versione ufficiale di GCC.<ref>[https://gcc.gnu.org/news.html GCC news and announcements]</ref><ref>[http://oldhome.schmorp.de/pgcc-faq.html#egcs Pentium Compiler FAQ - What is/was EGCS?]</ref>
== Storia ==
La GCC è stata creata nel [[1987]] da Richard Stallman come parte del sistema GNU, che aveva bisogno di un compilatore che fosse software libero. Il suo sviluppo è stato seguito da vicino dalla [[Free Software Foundation]].
 
GCC viene oggi sviluppato da programmatori di ogni parte del mondo ed è stato [[Portabilità|portato]] su più tipi di [[Microprocessore|processori]] e sistemi operativi di qualsiasi altro compilatore.
Nel [[1997]] un gruppo di sviluppatori insoddisfatti dalla natura chiusa degli sviluppi e dal loro ritmo troppo lento ha creato il progetto [[EGCS]] (''Experimental/Enhanced GNU Compiler System''), che incorporava diversi [[Fork (Sviluppo Software|fork]] sperimentali in una linea di sviluppo unica, separata da GCC. Lo sviluppo di EGCS si è dimostrato sufficientemente vitale, e nell'aprile del [[1999]] EGCS è stato promosso al rango di versione ufficiale di GCC.
 
Oltre a essere il compilatore ufficiale del sistema [[GNU]], incluse le varianti di [[GNU/Linux]], GCC è stato adottato come compilatore principale per la creazione e lo sviluppo di diversi altri sistemi operativi, come i vari [[Berkeley Software Distribution|BSD]], [[macOS]], [[NeXTSTEP]] e [[BeOS]] e DOS tramite il suo porting DJGPP.
La GCC viene oggi mantenuta da programmatori in ogni parte del mondo, ed è stata portata su più tipi di [[Microprocessore|processori]] e sistemi operativi di qualsiasi altro compilatore.
 
== Linguaggi ==
Oltre a essere il compilatore ufficiale del sistema GNU, incluse le varianti di GNU/Linux, la GCC è stata adottata come compilatore principale per la creazione e lo sviluppo di diversi altri sistemi operativi, come i vari [[BSD]], Mac OS X, [[NeXTSTEP]] e [[BeOS]].
La versione standard del compilatore comprende i front end per i linguaggi:
* [[Ada (linguaggio)|Ada]] (GCC per Ada, noto anche come ''[[GNAT]]'')
* [[C (linguaggio di programmazione)|C]]
* [[C++]] (GCC per C++ o ''G++'')
* [[Fortran]] (GCC per Fortran o ''[[gfortran]]'')
* [[linguaggio Java|Java]] (GCC per Java o ''[[GCJ]]'')
* [[Objective C|Objective-C]]
* [[Objective-C#Objective C.2B.2B|Objective-C++]]
* [[Go (linguaggio di programmazione)|Go]] (GCCGO)
 
== Architetture ==
== Utilizzo e funzionamento==
Tra i processori supportati da GCC (alla versione 4.1) vi sono:
* [[DEC Alpha|Alpha]]
* [[architettura ARM|ARM]]
* [[Atmel AVR|AVR e AVR32]]
* [[Blackfin]]
* [[Hitachi H8|H8/300]]
* [[System/370]], [[zSeries|System/390]]
* [[IA-32]] ([[Architettura x86|x86]])
* [[EM64T]], [[AMD64]] (x64)
* [[IA-64]] ([[Itanium]])
* [[Motorola 68000]]
* [[Motorola 88000]]
* [[architettura MIPS|MIPS]]
* [[PA-RISC]]
* [[PDP-11]]
* [[PowerPC]]
* [[SuperH]]
* [[SPARC]]
* [[Virtual Address eXtension|VAX]]
* le famiglie [[Renesas]] [[R8C]]/[[M16C]]/[[M32C]]
* la famiglia [[MorphoSys]]
 
In alcune release standard, sono stati supportati anche processori meno noti, tra cui [[A29K]], [[Advanced Risc Computing|ARC]], [[Atmel AVR]], [[C4x]], [[CRIS]], [[D30V]], [[DSP16xx]], [[FR-30]], [[FR-V]], [[Intel i960]], [[IP2000]], [[M32R]], [[68HC11]], [[MCORE]], [[MMIX]], [[MN10200]], [[MN10300]], [[microprocessore 320xx|NS32K]], [[ROMP]], [[Stormy16]], [[V850]] ed [[Xtensa]].
Il gcc è un compilatore che permette in modo potente di creare eseguibili.
Altri processori, come [[D10V]], [[PDP-10]], [[MicroBlaze]] e [[Zilog Z8001|Z8000]], sono stati supportati da versioni di GCC sviluppate separatamente rispetto alla versione della Free Software Foundation.
gcc è il comando che richiama il compilatore.
-o nome_file è un opzioni che permette di specificare al gcc quale file deve andare a compilatore. Ovviamente si scrive in linguaggio C dunque i file dovranno avere l'estensione .c
 
== SDCC (Small Device C Compiler) ==
La compilazione avviene in tre differenti fasi:
L'[https://web.archive.org/web/20190430033914/http://sdcc.sourceforge.net/ SDCC] ([[Small Devices C Compiler]]) è un [[porting]] [[open source]] per i microcontrollori delle sole famiglie [[Z80]], [[8051]], [[68HC11]], [[PIC (microcontrollore)|Pic]] è stato separato dal progetto GCC per poter ottimizzare meglio il lavoro dei [[microcontrollori]], dove serve una grande efficienza del compilatore e contemporaneamente vivere in un ambiente molto povero di risorse [[RAM]] e [[Read-Only Memory|ROM]], con interfacce personalizzate e dotato di registri speciali incompatibili con l'elaborazione.
 
Nonostante il piccolo numero di target disponibili, il compilatore è molto quotato e nella maggior parte delle situazioni dà risultati migliori dei sistemi di sviluppo professionali a pagamento.
# il file da compilare viene trattato dal preprocessore (analizza le direttive scritte per il compilatore solitamente sono quelle righe che iniziano con il carattere ''#''). Utilizzando il parametro -E si vedrà l'output del preprocessore
gcc -E nome_file.c
# nella seconda fase il file da origine ad un nuovo file formato oggetto che non è ancora eseguibile
# a questo punto entra in funzione il linker che unendo tutti i file oggetto (anche i file delle librerie lo sono) produce un file eseguibile contenente il tutto. Se si vuole creare un file da riutilizzare come libreria in altre sezioni del codice bisogna nominarlo .h in modo che venga compilato come oggetto.
 
È disponibile nei repo di [[Synaptic]]
== Utilizzo e funzionamento==
 
== Utilizzo e funzionamento ==
E' possibile ottimizzare la compilazione mediante l' utilizzo delle [[CFLAGS]] e [[CXXFLAGS]]
GCC, in quanto compilatore, ha come scopo primario la traduzione di [[codice sorgente]] in [[Linguaggio macchina|codice macchina]] eseguibile.
 
Ad esempio, per compilare un file di codice sorgente scritto in C, si può eseguire gcc fornendogli in input il file desiderato. Esiste un grandissimo numero di parametri che è possibile passare al compilatore per gestire i vari aspetti e i vari dettagli del processo di generazione del codice; l'unico obbligatorio è il nome del file da compilare.
[[categoria:linguaggi di programmazione]]
 
Un esempio elementare di compilazione è il comando
[[ca:Gcc]]
<syntaxhighlight lang="bash">
[[cs:GCC]]
gcc main.c
[[de:GNU Compiler Collection]]
</syntaxhighlight>
[[en:GNU Compiler Collection]]
che ordina al compilatore di leggere il file <code>main.c</code> (<code>.c</code> è l'[[Estensione (file)|estensione]] standard dei file contenenti [[C (linguaggio)|codice C]]) e compilarlo. Poiché non è stato specificato nessun nome per il file di output tramite il parametro <code>-o</code>, il file eseguibile viene chiamato <code>[[a.out]]</code>.
[[eo:GCC]]
 
[[es:GCC]]
La compilazione avviene in tre fasi:
[[et:GNU Compiler Collection]]
# il file da compilare viene trattato dal [[preprocessore]], che analizza le direttive scritte per il compilatore (definite in alcune righe del codice, solitamente posizionate in testa al file e precedute dal carattere <code>#</code>). Se eseguito con il parametro <code>-E</code>, gcc esegue solo questo passo, fornendo in output il risultato delle attività del preprocessore;
[[fr:GNU Compiler Collection]]
# nella seconda fase, il file dà origine a un nuovo [[Codice oggetto|file oggetto]], che non è ancora eseguibile;
[[he:GCC]]
# a questo punto entra in funzione il [[Linking|linker]] che produce un unico [[file eseguibile]], contenente il tutto, unendo tra loro tutti i file oggetto e i file delle [[Libreria software|librerie]]. Se si desidera non incorporare il codice delle librerie nel file eseguibile, si può usare il [[Dynamic-link library|collegamento dinamico]].
[[hu:GCC]]
 
[[ja:GNUコンパイラコレクション]]
== Note ==
[[ko:GCC]]
<references />
[[lt:GCC]]
 
[[nl:GNU Compiler Collection]]
== Altri progetti ==
[[pl:GCC]]
{{interprogetto|preposizione=sul}}
[[pt:GNU Compiler Collection]]
 
[[sk:GNU Compiler Collection]]
== Collegamenti esterni ==
[[sl:GNU Compiler Collection]]
* {{Collegamenti esterni}}
[[sv:GCC]]
* {{FOLDOC|GCC|GCC}}
[[tr:GCC]]
* {{cita web | 1 = http://www.network-theory.co.uk/docs/gccintro/ | 2 = An Introduction to GCC | accesso = 16 maggio 2010 | urlarchivio = https://web.archive.org/web/20100531171042/http://www.network-theory.co.uk/docs/gccintro/ | dataarchivio = 31 maggio 2010 | urlmorto = sì }}
[[uk:GCC]]
 
[[zh:GCC]]
{{GNU}}
{{FOSS}}
{{Controllo di autorità}}
{{Portale|software libero}}
 
[[Categoria:Progetto GNU]]