Il passo successivo all'accensione del computer consiste nel caricamento e nella esecuzione di init. Comunque, init, come la maggior parte dei programmi, utilizza delle funzioni di libreria.
Potreste aver già visto un esempio di programma C come questo:
main() { printf("Hello World!\n"); }
Il programma non contiene nessuna definizione della funzione
printf
, e quindi da dove salta fuori? Questa proviene dalle
librerie standard C che, su un sistema GNU/Linux, si chiamano glibc. Se
compilate il programma sotto Visual C++, allora quella funzione viene da
una implementazione Microsoft delle stesse funzioni standard. Esistono
milioni di queste funzioni standard, per matematica, stringhe,
allocazione di memoria per data e ora, e così via. Qualsiasi cosa in
Unix (incluso Linux) è stata scritta scritta in C, perciò ogni
applicazione utilizza queste funzioni.
Se guardate nella directory /lib
del vostro sistema Linux
troverete molti file chiamati libqualcosa.so
o
libqualcosa.a
, ecc. Sono le librerie di queste funzioni. Glibc
è esattamente l'implementazione GNU di queste funzioni.
Ci sono due modi in cui i programmi possono utilizzare queste le
funzioni di libreria. Se linkate il programma in modo statico,
queste funzioni di libreria verranno copiate dentro l'eseguibile che
viene creato. Le librerie libqualcosa.a
servono a questo. Se
invece linkate il programma in modo dinamico (e questa è la
modalità predefinita), quando il programma sarà in esecuzione e avrà
bisogno del codice della libreria, questo verrà chiamato dal file
libqualcosa.so
.
Il comando ldd
farà al caso vostro quando vorrete sapere quali
librerie sono necessarie ad un particolare programma. Per esempio, ecco
le librerie utilizzate da bash
:
[greg@Curry power2bash]$ ldd /bin/bash libtermcap.so.2 => /lib/libtermcap.so.2 (0x40019000) libc.so.6 => /lib/libc.so.6 (0x4001d000) /lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
Alcune funzioni delle librerie dipendono dal posto in cui vivete. Per
esempio, in Australia scriviamo le date nel formato dd/mm/yy
(NdT: giorno/mese/anno, come in Italia), ma in America viene usato il
formato mm/dd/yy. Esiste un programma che viene fornito con le
glibc
, chiamato localedef
, che consente di configurare
le localizzazioni.
Usate ldd
per scoprire quali librerie utilizzano le vostre
applicazioni preferite.
Usate ldd
per scoprire quali librerie sono utilizzate da
init
.
Createvi una libreria giocattolo, con una o due funzioni. Per crearla
utilizzate il programma ar
. La pagina di manuale di ar
può essere un buon punto di inizio per capire come fare. Scrivete,
compilate e linkate un programma che faccia uso di questa vostra
libreria.