3. GCC (GNU Compiler Collection, in origine GNU C
Compiler) è un insieme di compilatori creato
inizialmente da Richard Stallman
come parte del Sistema GNU
4. GCC può compilare :
* Ada
* Linguaggio C
* C++
* Fortran
* Java
* Objective-C
* Objective-C++
5. GCC può generare codice macchina per i seguenti processori:
# Alpha
# ARM
# Blackfin
# H8/300
# System/370, System/390
# IA-32 (X86)
# EM64T,AMD64 (X64)
# IA-64 (Itanium)
# Motorola 68000
# Motorola 88000
# MIPS
# PA-RISC
# PDP-11
# PowerPC
# SuperH
# SPARC
# VAX
L'opzione -m nella sintassi di GCC permette di identificare il tipo di processore target
6. 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.
7. La compilazione avviene in tre fasi:
1. 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 #). Se eseguito con il parametro -E, gcc
esegue solo questo passo, fornendo in output il risultato delle
attività del preprocessore.
2. nella seconda fase il file dà origine ad un nuovo file formato
oggetto che non è ancora eseguibile
3. a questo punto entra in funzione il linker che, unendo tutti i file
oggetto tra loro e ai file delle librerie, produce un unico file
eseguibile contenente il tutto. Per non duplicare il codice delle
librerie nell'eseguibile si può usare il collegamento dinamico.
8. Dove si trovano gli header file?
Generalmente la posizione in cui sono stati
installati è sotto:
/usr/include
9. Glibc (set di librerie standard c) riporta gli
header file dello standard Posix e ANSI C
10.
11. E' possibile ottenere una conformità stretta allo standard
(scartando le funzionalità addizionali) usando il gcc con l'opzione
-ansi. Questa opzione istruisce il compilatore a definire nei vari
header file soltanto le funzionalità previste dallo standard ANSI C
e a non usare le varie estensioni.
12. Alcune opzioni nella sintassi di GCC:
-x : specifica in maniera esplicita il tipo di linguaggio del file
sorgente.
-c : compila ma non linka. Il linking stage è ignorato. L'output è in
formato oggetto.
-E : preprocessa ma non compila. Il compiling stage è ignorato.
L'output è informato sorgente preprocessato.
-o : permette di scegliere il nome file di output, in base all'output
desiderato
Per ulteriori informazioni --help (o consultare le pagine manuale
man gcc )
13. Esercizio 0
creare un file di testo helloworld.c
contenente il codice per stampare su video la frase “Hello World”
quindi compilare.
14. Alcune differenze con Windows
La portabilità su GNU/Linux di programmi che sfruttano i protocolli TCP/IP sotto
Windows,risulta difficile poiché nei sistemi operativi Microsoft si utilizza la
libreria Winsock
mentre su GNU/Linux le librerie sono diversificate in base alla tipologia di
protocollo (generalmente sotto /usr/include/net , /usr/include/sys etc.. )
16. Creare un programma eseguibile da più file sorgente consiste
nel compilare separatamente i file sorgenti uno ad uno e poi
unirli nel file eseguibile finale.
Ma quando i file sorgente sono molti, come si fa a far si che non
diventi snervante il compilare?
Semplicemente creando un file contente il compilatore da
usare, in che modo usarlo, quali file compilare, come creare il
file eseguibile (programma o libreria che esso sia) e altre cose
sempre utili, come la directory dove trovare le librerie
necessarie ed i file di include.
Questo è il contenuto del file Makefile.
17. Un semplice makefile è composto da un insieme di regole, con la seguente forma:
target: dipendenze
<TAB> comando
.......
.......
Un target è di solito il nome di un file, che è generato da un programma; esempi di file
target sono i file eseguibili e i file oggetto.
Una dipendenza è un file che viene usato come input per creare il target. Un target
spesso dipende da diversi file.
Un comando è un azione da compiere. Una regola può essere composta da più di un
comando, su una linea.
Notate Attentamente: Si deve mettere un carattere TAB all'inzio di ogni linea di
comando, per far sí che il make legga la linea in maniera corretta.
Una regola spiega come e quando fare il make di dati file, che sono i target della data
linea.
18. Cmake (cross platform make) è un generatore di makefile.
Per la compilazione del programma è necessario verificare che
siano incluse tutte le librerie e scovare i loro percorsi all'interno
del file system.
Questo renderà possibile l'installazione (compilazione etc) di un
software a partire dal trittico:
./configure
make
make install
19. CMake dispone di una particolare sintassi
comprensiva di moltissime macro ed il loro
utilizzo è possibile mediante un apposito file
chiamato CMakeLists.txt
20. Cmake è disponibile sia come comando via terminale
che tramite un front-end grafico.
Il sito web di riferimento per cmake è : http://www.cmake.org/
21.
22.
23. Eclipse è un software opensource scritto in Java, prerogativa di
tale programma è quello di fornire un ambiente (IDE) per la
programmazione in Java.
24. La piattaforma di sviluppo è incentrata sull'uso di plug-in, delle
componenti software ideate per uno specifico scopo, per
esempio la generazione di diagrammi UML, tutta la piattaforma
è considerabile un insieme di plug-in.
25. Si passa infatti da un completo IDE per
il linguaggio Java (JDT, "Java Development Tools")
ad un ambiente di sviluppo per i
linguaggi C/C++ (CDT, "C/C++ Development Tools")
26. Su Ubuntu è possibile scaricare Eclipse (tramite pacchetto deb)
utilizzando:
Gestore dei pacchetti Synaptic (in modalità grafica)
oppure via apt-get (in modalità terminale)
27. Qualora non dovesse funzionare il sistema di software update
basato su repository di Eclipse è possibile scaricare i plugin CDT
da:
http://download.eclipse.org/tools/cdt/builds/6.0.0/
I.I200902031437/index.html
28. In Eclipse possiamo definire 2 tipi di progetto:
Standard C Project
Qualora non necessitiamo di un makefile o lo vogliamo creare in
un secondo momento con software esterno.
Managed C Project
Quando non abbiamo il makefile e vogliamo demandare la sua
creazione ad Eclipse
29. Per il debugging Eclipse utilizza di default GDB (GNU Source Level-Debugger)
il quale consente di:
Avviare il programma, specificando tutto ciò che influisce sul suo comportamento.
Fare in modo che il programma si interrompa sotto date condizioni
Esaminare quello che è accaduto, quando il programma è stato interrotto.
Cambiare il programma, in modo che si possano sperimentare gli effetti delle
correzioni di un dato bug
Per usare GDB occore produrre le informazioni necessarie in fase di compilazione,
utilizzando l'opzione -g (da gcc), che produrrà le info extra per il debugging.