Newsgroup: it.comp.os.linux.development
Titolo: moduli per gmodule

Carissimi.
Avrei un problemuccio: come compilare un modulo che possa essere aperto 
con g_module_open ?
Ho gia' provato con i parametri -fPIC, -shared e -export-dynamic, o 
anche con libtool (sebbene ammetto di non aver dedicato troppo tempo a 
questa alternativa) nulla da fare: la chiamata a g_module_open finisce 
sempre in un errore.
Suggerimenti?
-- 
Roberto -MadBob- Guido
mail bob4mail***@***
gmail.com
web 
http://madbob.homelinux.com
BrainTop Project maintainer - 
http://braintop.sf.net

 con g_module_open ?
ti giro un pezzo di un mio makefile
SOFLAGS= -shared -D_REENTRANT -D_GNU_SOURCE -fPIC
CFLAGS= -Wall `pkg-config --cflags glib-2.0`  `pkg-config --cflags gmodule-2.0` 
LIBS= -lpthread `pkg-config --libs glib-2.0`  `pkg-config --libs gmodule-2.0`
all: $(EXE) $(OBJ) $(SO)
oggetto.so: oggetto.o $(OBJ)
        cc $(SOFLAGS) $(CFLAGS) $(LIBS) $(OBJ) -o oggett.so
 
oggetto.o: oggetto.c
        cc $(CFLAGS) -c oggetto.c -o oggetto.o

 sempre in un errore.
Non l'ho mai fatto, ma che errore ti ritorna? Magari si capisce qualcosa.
-- 
  Giuseppe "Cowo" Corbelli \/\ My software: 
http://cowo.yoda2000.net
    **ANTI-SPAM** -- **Substitute IHATESPAM with cowo to reply by mail**
  -<! Any sufficiently advanced bug is indistinguishable from a feature. !>-
                 Rich Kulawiec

 
La funzione g_module_error(), preposta a dare qualche informazione in 
piu' sugli errori dovuti, dice solo "(null)".
Comunque, seguendo una intuizione dovuta al precedente post di Dodiesis, 
mi sono accorto di qualche dettaglio...
Non appena avro' finito il test in corso faro' sapere ;-)


 
Ho fatto cilecca...
Prima di tutto mi sono accorto che non avevo incluso una libreria (ma 
credo che non c'entri molto, considerando che riuscivo a compilare il 
modulo senza problemi...), poi ho pensato a compilarlo non come oggetto 
dinamico ma statico, ricordandomi solo dopo pero' che i moduli non hanno 
un main ( ;-P ).
Per la cronaca, si tratta di un modulo tipo quelli che usa XFCE per 
manipolare i parametri del sistema: copio&incollo qui uno dei 
Makefile.am usati per compilare tali moduli, temo di non aver colto 
qualche dettaglio:
---INIZIO
mouse_plugindir = @XFCE_MCS_MANAGER_PLUGINSDIR@
mouse_plugin_LTLIBRARIES = 
mouse_plugin.la
mouse_plugin_la_SOURCES =						\
	mouse_plugin.c							\
	inline-icon.h
mouse_plugin_la_CFLAGS =						\
	-I$(top_srcdir)							\
	-I$(top_srcdir)/plugins/gtk_common				\
	@LIBX11_CFLAGS@							\
	@LIBXFCEGUI4_CFLAGS@						\
	@XFCE_MCS_MANAGER_CFLAGS@					\
	-DLOCALEDIR=\""$(localedir)"\"
mouse_plugin_la_LDFLAGS =						\
	-avoid-version							\
	-export-dynamic							\
	-module
mouse_plugin_la_LIBADD =						\
	@LIBS@								\
	@LIBX11_LIBS@							\
	@XFCE_MCS_MANAGER_LIBS@
EXTRA_DIST =								\
	inline-icon.h							\
	icon.png
noinst_DATA =								\
	inline-icon.h							\
	icon.png
inline-icon.h: $(srcdir)/icon.png
	gdk-pixbuf-csource --raw --build-list				\
	default_icon_data $(srcdir)/icon.png > inline-icon.h
---FINE
Suggerimenti su come tradurre tutto cio' in una stringa da terminale 
(non uso Makefiles, per ora...)?


 
Ho *parzialmente* risolto col metodo piu' stupido: ho eseguito una 
installazione del pacchetto xfce-mcs-plugins per vedere in che modo 
venivano compilati i moduli per XFCE ;-).
Il risultato, per ora, e' questo accrocchio:
---INIZIO
libtool --mode=compile gcc `pkg-config --libs --cflags 
librerie_che_servono` -g -c -o modulo.lo path/dei/sorgenti &&
gcc `pkg-config --libs --cflags librerie_che_servono` -g 
path/dei/sorgenti -c -fPIC -DPIC -o modulo.o &&
# questa e' la cosa piu' assurda: se non lo faccio libtool va
# in panico :-\
cp modulo.o .libs/ &&
libtool --mode=link gcc -g -o 
modulo.la
 -export-dynamic -module 
modulo.lo -avoid-version `pkg-config --libs --cflags 
librerie_che_servono` &&
---FINE
Ci si trova con mille files modulo.qualcosa sparsi per la directory, e 
quel che interessa (il modulo che andra' aperto, appunto), sta' nella 
directory .libs sotto il nome di modulo.so.
Per ora ho ancora qualche problema (segfault dopo aver aperto), ma forse 
e' dovuto a bachi nelle altre mie librerie cui faccio riferimento.
Sicuramente c'e' un modo migliore di fare il tutto (ad esempio 
sostituendo invocazioni dirette di gcc senza passare per libtool che fa 
casini...), ma e' pur sempre qualcosa :-)


 (non uso Makefiles, per ora...)?
ciao.
http://www.sgrunt.net/note/g_module_example/
vedi se riesci.