18.08.2013 Views

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

Dalla A alla Z passando per C - Robotica

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

è il file /usr/include/math.h. La libreria standard del C è contenuta nel file /usr/lib/libc.a, e<br />

contiene tutte le funzioni dello standard ANSI/ISO del linguaggio, come printf. Questa libreria<br />

viene linkata in ogni programma <strong>per</strong> default.<br />

In genere, se si tenta di utilizzate una funzione di libreria senza aver esplicitamente istruito<br />

il compilatore sul file che contiene le funzioni, il linker genera un errore del tipo<br />

# gcc -Wall usemath.c -o usemath<br />

/tmp/ccbR4Ojn.o: In function ‘main’:<br />

/tmp/ccbR4Ojn.o(.text+0x19): undefined reference<br />

to ‘sqrt’<br />

Nel caso citato, il compilatore non è sato in grado di trovare la funzione sqrt, utilizzata dal<br />

programma usemath, dal momento che essa non è definita in libc.a 2 .<br />

Incidentalmente, il file /tmp/ccbR4Ojn.o è un file creato temporaneamente dal compilatore<br />

<strong>per</strong> eseguire l’o<strong>per</strong>azione di linking. Per abilitare il compilatore a linkare la libreria corretta è<br />

possibile utilizzare una istruzione come la seguente:<br />

# gcc -Wall usemath.c /usr/lib/libm.a -o usemath<br />

La librerialibm.a contiene i file oggetto delle funzioni matematiche come sin, cos eexp (vedi<br />

Sezione 14.5). Il linker cerca tra i file oggetto contenuti nella libreria <strong>alla</strong> ricerca della funzione<br />

da linkare. Quando la funzione desiderata viene trovata, il programma principale può quindi<br />

essere correttamente compilato.<br />

Il file eseguibile finale include il codice macchina delle funzioni scritte dal programmatore e<br />

di tutte le funzioni di libreria richiamate dal programma.<br />

Per evitare di specificare tutto il <strong>per</strong>corso di ciascun file di libreria sulla linea di comando,<br />

il compilatore prevere una scorciatoia con l’opzione -l <strong>per</strong> linkare le librerie. Per esempio,<br />

l’istruzione seguente<br />

# gcc -Wall calc.c -lm -o calc<br />

è equivalente al comando precedentemente illustrato.<br />

In generale, l’opzione -lNOME tenta di linkare i file oggetto contenuti nella libreria di nome<br />

libNOME.a che si trova nelle directory standard del compilatore. Le directory nelle quali ricercare<br />

le librerie possono essere specificate nella linea di comando<br />

Tipicamente la compilazione di un programma includerà varie opzioni del tipo -lNOME di<br />

linking, <strong>per</strong> includere tutti i file oggetto necessari, come librerie grafiche, <strong>per</strong> la comunicazione,<br />

ecc.<br />

Per esempio, <strong>per</strong> utilizzare le funzioni di lettura/scrittura di immagini compresse in formato<br />

JPEG, è possibile usare le funzioni della libreria libjpeg.a includendo il file di intestazione<br />

e compilando con<br />

# gcc -Wall -ljpeg -o viewer viewer.c<br />

14.1.1 Il comando ar<br />

Utilizzando il comandoar è possibile creare delle librerie <strong>per</strong>sonalizzate, riunendo vari file oggetto<br />

in un unico o più file di libreria.<br />

E’ anche possibile verificare il contenuto di una libreria, sempre utilizzando il comando ar.<br />

Digitando <strong>per</strong> esempio il comando:<br />

2 Talvolta la libreria matematica, come altre, vengono linkate <strong>per</strong> default dal linker.<br />

137

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!