Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
Dalla A alla Z passando per C - Robotica
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