#format wiki #language it <
> <> <> = Introduzione = Gnu Compiler Collection ('''GCC''') è una collezione di compilatori e fornisce un'interfaccia uniforme per scrivere programmi in C, C + +, Java, Objective-C, Fortran, Ada, Assembler e Go (a partire da '''Ubuntu 11.10'''). Il significato originario di '''GCC''' era GNU C Compiler, ma da allora poiché sono stati aggiunti altri linguaggi e il suo significato è stato cambiato in Gnu Compiler Collection. Questa guida si prefigge di aiutare nella programmazione in '''Ubuntu''' usando '''GCC''' per compilare. Non ha il fine di introdurre ai linguaggi di programmazione o di dar supporto ad essi. Per questo occorre leggere molte pagine web, guide in linea o dei buoni libri di testo. = Installazione = [[InstallareProgrammi | Installare]] il pacchetto [[apt://build-essential | build-essential]]. Questo fornirà i compilatori per il linguaggio C e C++ e molti strumenti utili che gli gli sviluppatori utilizzano frequentemente. Per gli altri linguaggi è richiesta l'installazione dei seguenti pacchetti: * [[apt://gcj | gcj]] (Java) * [[apt://gobjc | gobjc]] (Objective-C) * [[apt://gfortran | gfortran]] (Fortran) * [[apt://gnat | gnat]] (Ada) * [[apt://gccgo | gccgo]] (Go) = Utilizzo = La sintassi base di utilizzo è la seguente: {{{ gcc [parametri] nome_file_sorgente.estensione -o nome_file_output }}} ad esempio se si dà il comando: {{{ gcc -g -Wall -Wextra -pedantic-errors foo.c -o foo }}} il file sorgente `foo.c` sarà compilato e si otterrà il file di output `foo`. Una volta generato il file binario sarà possibile avviarlo da un terminale con il comando:{{{ ./nome_file_output }}} sostituendo nome_file_output con il nome del file eseguibile che si desidera avviare. == Esempio di programma == I seguenti file, dopo essere stati compilati, mostrano sul terminale Hello World. ||'''C++ (main.cc)'''||'''C (main.c)'''||'''Assembler (main.S)'''||'''Ada (main.adb)'''|| ||#include <
> int main() <
> { <
> std::cout << "Hello World\n"; <
> } ||#include <
> int main () <
> { <
> printf ("Hello World\n"); <
> } ||.section .data <
> hello: .ascii "Hello World!\n" <
> .section .text <
> .globl _start <
> _start: <
> mov $4, %eax <
> mov $1, %ebx <
> mov $hello, %ecx <
> mov $13, %edx <
> int $0x80 <
> mov $1, %eax <
> mov $0, %ebx <
> int $0x80 ||with Ada.Text_IO; <
> use Ada.Text_IO; <
> <
> procedure main is <
> begin <
> Put_Line("Hello World!"); <
> end main; || || '''g++ main.cc'''||<:> '''gcc main.c''' ||<:> '''gcc main.S''' ||<:> '''gcc -c main.adb''' || L'ultima riga della tabella mostra il comando per mandare in compilazione il sorgente. E' da notare che il programma scritto in C++ è compilato dal comando g++. Il comando gcc riconosce il linguaggio di input in base all'estensione del file del sorgente (`.cpp`, `.cc` e `.cxx` sono tutte corrette) ma decide di non linkare la libreria standard del C++ (libstdc++). Il comando g++ fa questo in automatico e si risparmiano un sacco di sforzi. Se nulla è stato specificato il compilatore andrà a creare un binario eseguibile chiamato di default `a.out`. = Parametri = Ci sono molti parametri utili, i più importanti sono riportati nella seguente tabella. ||'''Parametro''' ||'''Spiegazione''' || ||<:> -o ||<:(> Specifica il nome del file di output (`a.out` è quello predefinito). || ||<:> -c||<:(> Il file sorgente è solo compilato ma non non avviene in linking (terminerà con l'estensione `.o`). || ||<:> -OX||<:(>Ottimizza il codice sorgente, il grado di ottimizzazione (indicato da X) può essere 0 (nessuno), 1 (dimensioni e velocità), 2 (velocità), 3 (velocità, aggressività o dimensioni). || ||<:>-march=nativ ||<:(>Ottimizzato specialmente per il processore esistente, non si avvierà su altre architetture. Non adatto per distcc. || ||<:>-lXXX ||<:(>Collega altre librerie (ad esempio -lncurses per libncurses) || ||<:>-std=XXX ||<:(>Imposta il linguaggio di programmazione predefinito (ad esempio XXX può essere c99, c1x, gnu++98, c++98 c++0x) || ||<:>-ansi||<:(>Consente solo costrutti conformi ad ANSI C || ||<:>-Wall ||<:(>Abilita avvisi utili che sono supportati dal compilatore gcc. || ||<:>-Wextra ||<:(>Abilita ancora più avvisi che sono supportati dal compilatore gcc. || ||<:>-pedantic ||<:(>Dà tutti gli avvisi richiesti dal rigoroso ISO C e ISO C + +. -pedantic-errors è simile a -pedantic, solo che sono prodotti errori anziché avvisi.|| ||<:>-v ||<:(>Stampa i comandi e passi che il compilatore esegue esattamente (preprocessore, compilatore, assemblatore, linker...) || ||<:>-g ||<:(>Produce informazioni di debug nel formato nativo del sistema operativo (stabs, COFF, XCOFF, o DWARF 2). GDB può lavorare con queste informazioni di debug. || ||<:>-ggdb ||<:(>Produce espressioni di debug per usarle da GDB. questo significa usare il più espressivo formato disponibile (DWARF 2, stabs, o il formato nativo se nessuno di questi sono supportati), comprese le estensioni GDB, se possibile. || = Ulteriori risorse = * [[http://gcc.gnu.org/ | Sito del progetto]] * [[http://wiki.ubuntuusers.de/GCC | Guida originale]] ---- CategoryHomepage