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.