GNU Linux Programming introduction

29
Programmare in C su GNU/Linux

description

This Slide has been used to introduce students to programming to GNU/Linux Operative System. Relator: Vincenzo Paolo Fraddosio

Transcript of GNU Linux Programming introduction

Page 1: GNU Linux Programming introduction

Programmare in C su GNU/Linux

Page 2: GNU Linux Programming introduction
Page 3: GNU Linux Programming introduction

GCC (GNU Compiler Collection, in origine GNU C Compiler) è un insieme di compilatori creato

inizialmente da Richard Stallmancome parte del Sistema GNU

Page 4: GNU Linux Programming introduction

GCC può compilare :

* Ada * Linguaggio C * C++ * Fortran * Java * Objective-C * Objective-C++

Page 5: GNU Linux Programming introduction

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

Page 6: GNU Linux Programming introduction

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.

Page 7: GNU Linux Programming introduction

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.

Page 8: GNU Linux Programming introduction

Dove si trovano gli header file?

Generalmente la posizione in cui sono stati installati è sotto:

/usr/include

Page 9: GNU Linux Programming introduction

Glibc (set di librerie standard c) riporta gli header file dello standard Posix e ANSI C

Page 10: GNU Linux Programming introduction
Page 11: GNU Linux Programming introduction

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.

Page 12: GNU Linux Programming introduction

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 )‏

Page 13: GNU Linux Programming introduction

Esercizio 0

creare un file di testo helloworld.ccontenente il codice per stampare su video la frase “Hello World” quindi compilare.

Page 14: GNU Linux Programming introduction

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.. )‏

Page 15: GNU Linux Programming introduction

Cmake

Page 16: GNU Linux Programming introduction

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.

Page 17: GNU Linux Programming introduction

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.

Page 18: GNU Linux Programming introduction

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:

./configuremakemake install

Page 19: GNU Linux Programming introduction

CMake dispone di una particolare sintassi comprensiva di moltissime macro ed il loro

utilizzo è possibile mediante un apposito file chiamato CMakeLists.txt

Page 20: GNU Linux Programming introduction

Cmake è disponibile sia come comando via terminaleche tramite un front-end grafico.

Il sito web di riferimento per cmake è : http://www.cmake.org/

Page 21: GNU Linux Programming introduction
Page 22: GNU Linux Programming introduction
Page 23: GNU Linux Programming introduction

Eclipse è un software opensource scritto in Java, prerogativa di tale programma è quello di fornire un ambiente (IDE) per la

programmazione in Java.

Page 24: GNU Linux Programming introduction

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.

Page 25: GNU Linux Programming introduction

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")‏

Page 26: GNU Linux Programming introduction

Su Ubuntu è possibile scaricare Eclipse (tramite pacchetto deb) utilizzando:

Gestore dei pacchetti Synaptic (in modalità grafica)‏

oppure via apt-get (in modalità terminale)‏

Page 27: GNU Linux Programming introduction

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

Page 28: GNU Linux Programming introduction

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

Page 29: GNU Linux Programming introduction

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.