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
|