Newsgroup: it.comp.lang.c
Titolo: Qualche chiarimento sulle librerie.

Tutto ciò che so è che includendo in un programma C l'header di una
libreria posso poi usare le funzioni che essa contiene. Io uso il
DJGPP, ed ho visto che nella directory include ci sono un sacco di
header, ma non ho ancora capito dove sono le librerie vere e proprie,
ovvero non ho mai trovato il codice delle funzioni.
Quando penso ad una libreria immagino quindi una coppia header-file,
ovvero un interfaccia ed un file che contiene una o più funzioni.
Questo file immagino sia già compilato, e quindi immagino che sia
possibile scrivere delle librerie in C, compilarle, creare l'header e
avere così a disposizione un'insieme di funzioni richiamabili tramite
un #include in qualsiasi programma C.
Qual'è la procedura per ottenere una libreria, e la parte eseguibile
che formato ha (intendo dire .exe, .bho) e come la ottengo se volessi
farne una mia?
Grazie e ciao, Piero.

you wrote :
#Qual'č la procedura per ottenere una libreria, e la parte eseguibile
#che formato ha (intendo dire .exe, .bho) e come la ottengo se volessi
#farne una mia?
Il DJGPP produce file oggetto con estensione .o e le librerie hanno
estensione .a
L'utility per creare le librerie e' ar.exe (se non sbaglio).
--------------------------------------------------------
* Andrea Laforgia        (
andrea_...@bigfoot.com
) *
--------------------------------------------------------

 Grazie e ciao, Piero.
-- 
+ ICEMAZE +
ice...@planet.it
"Digito ergo sum"

L'utility per creare le librerie e' ar.exe (se non sbaglio).
Ho dato un'occhiata ad ar, e sono rimasto perplesso. All'inizio
afferma di essere un programma in grado di creare archivi di file e di
recuperarli (una specie di zip), ma ad un certo punto si mette a
parlare di 'oggetti binari rilocabili' e di 'tavola dei simboli' e lì
mi perdo perchè non so che cosa siano 'ste cose.
Ho però scoperto che con ar -tv libc.a ottengo l'elenco dei file che
compongono libc.a, ed ho notato che sono tutti con estensione .o. Mi
sono fatto dunque l'idea che per ottenere una libreria una delle
strade possibili sia quella di compilare un .c per ottenere un .o
dicendo a GCC di creare un oggetto rilocabile (ho un vago ricordo
dell'esistenza di una qualche opzione per far ciò), e quindi darlo in
pasto ad ar che crea questa misteriosa 'tavola dei simboli' e sputa un
file .a che poi è una libreria.
Scrivo lo stesso perchè il tutto ha per me ancora una valenza mistica,
in quanto non ho ancora ben capito cosa sono i file .o che GCC mi
sputa assieme all'eseguibile .exe ogni volta che compilo qualcosa, e
non ho capito bene cosa cambia tra un file .o rilocabile o meno, né
cosa si intenda per 'simbolo'...
... ma per fortuna c'è il newsgroup. Vero? ;)
Ciao e grazie, Piero.

"Options | Libraries" e aggiungere le librerie desiderate.
Cioè se creo una mia libreria con header Piero.h non mi basta un
#include "Piero.h" all'inizio del sorgente? Ci vuole qualcos'altro?
Chiedo queste cose perché non ho ancora mai usato RHIDE per ragioni di
tempo (troppe cose da imparare in troppo poco tempo, però me lo
riservo per un attimo di tranquillità) e quindi scrivo i sorgenti in
Notepad.
Ciao, Piero.

 cosa si intenda per 'simbolo'...
Il file .o è il file oggetto prodotto dalla compilazione, praticamente
un blocco di codice macchina. Un programma è rilocabile quando può
essere caricato in memoria a qualsiasi locazione (quindi non deve
contenere riferimenti assoluti ma solo relativi alla sua posizione). Un
.o credo debba necessariamente essere rilocabile ma non ne sono sicuro.
Un simbolo è un nome che serve al linker per associare un elemento del
programma (variabile, funzione, etc.) al suo effettivo indirizzo.
EMG

 #include "Piero.h" all'inizio del sorgente? Ci vuole qualcos'altro?
Si. Nella linea di comando del GCC o del linker devi aggiungere il
parametro -l seguito dal nome della tua libreria.
EMG