linux user group brescia

immagine del castello

Archivio della mailing list

Programma -> libreria

Luca Giuzzi giuzzi a dmf.bs.unicatt.it
Dom 21 Gen 2001 20:38:36 UTC
Mah, il suddividere il codice in moduli distinti dipende piu' dal progetto
 che non dall'architettura di sistema. La distinzione libpippo/libpippo-devel
 e' tipica delle distribuzioni che mettono tutti i files di prototipi
 (e una versione `statica' della libreria) nel pacchetto devel e la versione
 dinamica (.so) nel pacchetto `base'.

Di base per linkare piu' moduli distinti basta fare un

gcc pippo.c -c
gcc caio.c -c
gcc pippo.o caio.o -o sempronio
[in questo modo le funzioni di pippo e di caio vengono linkate assieme..
 in realta' l'ultimo comando richiama il linker ld piuttosto che il
 back-end di gcc e -tacitamente- ci mette insieme pure la libc]

Se vuoi creare delle librerie riutilizzabili ti serve
1. avere un file `a parte' con i prototipi delle funzioni, le definizioni
 delle struct (se ne hai), degli oggetti, etc. [file degli headers 
  pippo.h]
2. fondere gli oggetti generati in una libreria da linkare...
Il punto 2:
 se vuoi una libreria statica basta fare
 ar c libpippo.a obj1.o obj2.o etc. etc.
 ranlib libpippo.a
 [non realmente necessario, ma comunque e' bene farlo]
 per una libreria dinamica ti consiglio

1. di compilare con l'opzione -fpic (se e' piccola) o -fPIC per avere
  "Position Independent Code" [i.e. un oggetto rilocabile runtime: e'
   cosa buona in quanto se la libreria e' rilocabile, allora basta 
   caricarla in memoria una sola volta per tutti i programmi che la usano
   contemporaneamente]

2. linkare il tutto con il comando
 gcc -Wl,-soname libpippo.so.x.y obj1.o obj2.o etc. etc.
 [in realta' si potrebbe usare anche qui direttamente ld]

Ciao,
 lg



Maggiori informazioni sulla lista Lug