Questa guida è stata verificata solo con versioni obsolete di Ubuntu, potrebbe non essere più valida. Vuoi contribuire ad aggiornarla? Clicca qui!

Problemi in questa pagina? Segnalali in questa discussione

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

Installare il pacchetto 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:

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 <iostream>
int main()
{
std::cout << "Hello World\n";
}

#include <stdio.h>
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


CategoryHomepage

LucaGambardella/Prove1 (l'ultima modifica è del 18/07/2012 08.07.53, fatta da LucaGambardella)