Newsgroup: it.comp.lang.c++
Titolo: Informazioni su creazione libreria

Ciao a tutti,
vorrei sapere se c'è un modo per far si che all'utente di una mia libreria 
io possa dare solo il file header con tutte le dichiarazioni in modo da 
poter vedere come utilizzarle e un file compilato con le definizioni, al 
fine di non fargli vedere il codice che le implementa. Come dovrei compilare 
il file con le definizioni? E come va linkato?
So che magari varia da compilatore a compilatore, ma potete farmi un esempio 
per g++ (front-end C++ di gcc).
Grazie 

Noixe ha scritto:

la libreria:
es pippo.c
double mean(double a, double b)
{
  return (a+b) / 2;
}
l'header
es pippo.h
poi per libreria statica
compili l'oggetto:
gcc -c pippo.c -o pippo.o
e quindi:
ar  rcs libpippo.a pippo.o
a questo punto puoi distribuire libpippo e relativo header.
per compilare: (supponendo che libpippo sia nella stessa directory dei
sorgenti)
gcc -static main.c -L. -lpippo -o file_eseguibile_statico
il -L. meno elle grande punto dice che la directory in cui cercare le
librerie extra è quella corrente il meno l minuscolo -l linka la
libreria libpippo.
per le dinamiche è leggermente più complesso ma se gooogli un pò salta
fuori un sacco di roba.

 gcc -static main.c -L. -lpippo -o file_eseguibile_statico
Mi dice che non trova pippo, ma ho tutto nella stessa directory
Ciao 

 Mi dice che non trova pippo, ma ho tutto nella stessa directory
Umh... ho fatto delle modifiche e funziona, ma non mi pare fossero modifiche 
che incidessero per il buon esito del test... ora faccio qualche altra 
prova. 

 gcc -static main.c -L. -lpippo -o file_eseguibile_statico
anche senza -static funziona 

Noixe ha scritto:

è una convenzione sui nomi, di solito le librerie statiche iniziano con
lib e hanno l'estensione .a
man gcc:
-static
           On systems that support dynamic linking, this prevents
linking with the shared libraries.  On other systems, this option has no
effect.
di solito si utilizza quando si collega l'eseguibile a librerie
statiche, ora tu hai solo la versione statica ma altrimenti dovrebbe
linkarti di default a quella dinamica.
Comunque cerca qualche di recuperare su internet qualche dispensa
universitaria sul c++ di solito ci sono anche parti che riguardano la
compilazione
oppure un libro come:
gcc the definitive guide.
io di solito le librerie mi limito ad usarle non mi è mai capitato di
crearne delle mie da distribuire agli altri, quindi era un suggerimento
nell'attesa di qualche fonte più pratica in materia.
michelangelo

 il file con le definizioni? E come va linkato?
1. l'argomento e' OT
2. in ogni caso hai il problema dei templates, con molti compilatori di
fatto non usi gli external templates
3. per creare librerie (e per ogni altra cosa) consiglio un qualche
build tool. Potrebbe essere gli autotools. Io mi trovo molto bene con
cmake, lo trovo piu' facile e comodo da usare. 
-- 
-riko

 statiche,
Attenzione, -static non serve a quello che dici tu.
Quando hai una libreria statica, un .a per intendeci, è sufficiente
fare
gcc miofile.c mialibreria.a -o mioexe
-static entra in gioco _soltanto_ quando parliamo di librerie
dinamiche. Serve appunto a includere tutto il codice della libreria
dinamica nell'eseguibile generato, rendendolo così indipendente dalla
libreria in questione (ad esempio puo essere ridistribuito in un
sistema in cui la libreria dinamica non esiste).
Ciao
Gg