Newsgroup: it.comp.os.linux.development
Titolo: Gestire le proprie librerie

Dopo aver passato gli ultimi tempi a studiare il C++ ho iniziato da 
poco ad sviluppare "seriamente" sotto linux; dato che uno dei miei 
obiettivi e' scrivere codice facilmente riutilizzabile, ho pensato di 
crearmi varie librerie in modo da poterle usare quando necessario.
Ho finito oggi di scrivere una classe "Rational" che incapsula il 
concetto matematico di frazione, l'ho compilata e ho prodotto la 
relativa libreria statica con "ar"; la mia classe Rational utilizza 
alcune funzioni presenti in un altra mia libreria, "my_math", 
contenente alcune funzioni matematiche di utilita' generale; in 
pratica, la libreria "librational.a" dipende da "libmy_math.a", e sino 
a qua niente di strano.
Il mio dubbio e' questo: supponiamo che io ora scriva un programma che 
utilizza la classe Rational: per eseguire il linking correttamente devo 
ovviamente specificare l'opzione "-lrational"; il problema e' che, dato 
che librational.a dipende da libmy_math.a per non ottenere errori devo 
specificare anche "-lmy_math"; sino a che si tratta di due file messi 
in croce non c'e' alcun problema, ma ho paura che quando le librerie 
inzieranno ad essere piu' tante ci sara' troppa confusione.
C'e' un modo per specificare le dipendenze tra librerie? In pratica 
vorrei che, specificando "-lrational" il linker capisse di dover 
linkare anche libmy_math.a.
grazie Anto
-- 
Antonio Cuni, 19 anni, studente
Brainbench C++ Master: 4.6, higher than 98% of all previous test takers.
C Language: 3.32, higher than 79% of all previous test takers.
Guida C/C++ di Programmazione.it: 
http://cpp.programmazione.it

 linkare anche libmy_math.a.
hmm, diciamo che son preso molto peggio di te nella programmazione
generica...
però credo che in questo caso avresti fatto meglio a creare una sola
libreria che contenga entrambe le unità.
--
DGP85
ICQ# 49371455
May the Force be with you!

 libreria che contenga entrambe le unità.
in questo caso puo' darsi (anche se credo che sia meglio mantenerle 
separate), ma in un caso piu' generale?
Pensala cosi': mettiamo il caso (ipotetico) che io voglia scrivere un 
wrapper per le QT; la soluzione ovvia e' fare una libreria chiamata, ad 
esempio, my_GUI.
Ovviamente my_GUI si appoggia alle QT, quindi l'ipotetico utente del 
mio programma dovra' linkare in questo modo:
        g++ -o eseguibile sorgente.cc -lmy_GUI -lqt
(non so se per linkare le qt si usa -lqt o altro, ma non e' questo il 
punto).
Non c'e' modo di risolvere l'inconveniente?
ciao Anto


         g++ -o eseguibile sorgente.cc -lmy_GUI -lqt
andando a tentativi (come faccio di solito) mi verrebbe da provare
    libtool g++ -o eseguibile sorgente.cc -lmy_GUI
anche se al momento non ho possibilità di provarlo e non ho idea se
funzionerebbe...


 linkare anche libmy_math.a.
Con   le   librerie  dinamiche   puoi   usare   libtool  (info   libtool
"Inter-library dependencies"). Per  quelle statiche  dovrebbe funzionare
nello stesso modo, ma non ci metterei la mano sul fuoco.
Ci sono pero` delle limitazioni nell'uso di libtool con codice C++ (info
libtool "C++ libraries").
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
"Ci sono le balle , le megaballe e le statistiche".
 Mark Twain

 linkare anche libmy_math.a.
Io userei gli autotools importando delle macro m4.
Es: quando fai un prog GTK in linea teorica dovresti linkare pure la GLIB.
Invece ti crei delle macro m4 per la libreria di livello piu' alto che
controllano la presenza di tutte le dipendenze e sistemano CFLAGS e LDFLAGS.
A quel punto dal 
configure.in
 ti basta una chiamata a, es. AM_PATH_MYLIB per
avere tutto in regola.
--
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.mascanc.net
	**ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! When you say "I wrote a program that crashed Windows", people just stare
     at you blankly and say "Hey, I got those with the system, *for free*" !>-
                                (By Linus Torvalds)

 funzionerebbe...
non funzionerebbe, dato che i file oggetti di libmy_GUI contengono 
riferimenti a funzioni di libqt...


 a, es. AM_PATH_MYLIB per avere tutto in regola.
ci daro' una occhiata, grazie
ciao anto


 funzionare nello stesso modo, ma non ci metterei la mano sul fuoco.
non credo. Da "info libtool" risulta che e' solo per librerie dinamiche.
ciao Anto


non credo. Da "info libtool" risulta che e' solo per librerie dinamiche.
No. Crea sia librerie statiche che dinamiche, e lo puoi decidere anche
a configure time con --enable-static --disable-static --enable-shared
--disable-shared
-- 
+---- | Un OS per domarli, Un OS per trovarli,             |  -o)
+---+ | Un OS per ghermirli e nel buio incatenarli         |  /\\
 O  | | Nella terra di Redmond, ove l'ombra cupa scende... | _\_V
                    raffaele punto salmaso presso libero punto it

 non credo. Da "info libtool" risulta che e' solo per librerie dinamiche.
Hum, la cosa ha senso. Non puoi usare librerie dinamiche?
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Sono un mirabile incrocio tra Tarzan e Giacomo Leopardi.
In me convivono tutte le doti intelluttuali di Tarzan e
tutta la prestanza fisica di Giacomo Leopardi.
A. Borsani

 --disable-shared
ah, ok grazie. Vorra' dire che andro' a leggere meglio...
