Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 1145

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>Building and Installing Software Packages for Linux: Primo esempio: Xscrabble</TITLE>
 <LINK HREF="Software-Building-HOWTO-10.html" REL=next>
 <LINK HREF="Software-Building-HOWTO-8.html" REL=previous>
 <LINK HREF="Software-Building-HOWTO.html#toc9" REL=contents>
</HEAD>
<BODY>
<A HREF="Software-Building-HOWTO-10.html">Avanti</A>
<A HREF="Software-Building-HOWTO-8.html">Indietro</A>
<A HREF="Software-Building-HOWTO.html#toc9">Indice</A>
<HR>
<H2><A NAME="s9">9. Primo esempio: Xscrabble</A></H2>

<P>L'<CODE>Xscrabble</CODE> di Matt Chapman aveva l'aria di essere un programma
che sarebbe stato interessante avere, poich&eacute; si d&agrave; il caso che
io sia un accanito giocatore di Scrabble<CODE>TM</CODE>. Lo scaricai, decompressi,
e lo compilai seguendo la procedura nel file README:
<BLOCKQUOTE><CODE>
<PRE>
     xmkmf
     make Makefiles
     make includes
     make
</PRE>
</CODE></BLOCKQUOTE>
<P><EM>Ovviamente non funzion&ograve;...</EM>
<P>
<BLOCKQUOTE><CODE>
<PRE>
gcc -o xscrab -O2 -O -L/usr/X11R6/lib 
init.o xinit.o misc.o moves.o cmove.o main.o xutils.o mess.o popup.o
widgets.o display.o user.o CircPerc.o
-lXaw -lXmu -lXExExt -lXext -lX11 -lXt -lSM -lICE -lXExExt -lXext -lX11
-lXpm -L../Xc -lXc

BarGraf.o(.text+0xe7): undefined reference to `XtAddConverter'
BarGraf.o(.text+0x29a): undefined reference to `XSetClipMask'
BarGraf.o(.text+0x2ff): undefined reference to `XSetClipRectangles'
BarGraf.o(.text+0x375): undefined reference to `XDrawString'
BarGraf.o(.text+0x3e7): undefined reference to `XDrawLine'
etc.
etc.
etc...
</PRE>
</CODE></BLOCKQUOTE>
<P>Indagai su ci&ograve; nel newsgroup 
<A HREF="news://comp.os.linux.x">comp.os.linux.x</A>, e qualcuno gentilmente mi indic&ograve; che, 
apparentemente, le librerie Xt, Xaw, Xmu, e X11 non erano state trovate
nella fase di link. Hmmm...
<P>C'erano due Makefile principali, e quello nella directory <CODE>src</CODE>
cattur&ograve; la mia attenzione. Una linea nel Makefile definita LOCAL_LIBS:
LOCAL_LIBS = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB). Qui c'erano i
riferimenti alle librerie non trovate dal linker.
<P>Cercando il successivo riferimento a LOCAL_LIBS, vidi alla linea 495 di
quel Makefile:
<BLOCKQUOTE><CODE>
<PRE>
      $(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LOCAL_LIBS) $(LDLIBS)
$(EXTRA_LOAD_FLAGS)
</PRE>
</CODE></BLOCKQUOTE>
<P>Ora, cos'erano queste LDLIBS?
<BLOCKQUOTE><CODE>
<PRE>
      LDLIBS = $(LDPOSTLIB) $(THREADS_LIBS) $(SYS_LIBRARIES)
$(EXTRA_LIBRARIES)
</PRE>
</CODE></BLOCKQUOTE>
<P>Le SYS_LIBRARIES erano:
<BLOCKQUOTE><CODE>
<PRE>
 SYS_LIBRARIES = -lXpm -L../Xc -lXc
</PRE>
</CODE></BLOCKQUOTE>

S&igrave;! Le librerie mancanti erano qui.
<P>&Egrave; possibile che il linker avesse bisogno di vedere le LDLIBS prima
delle LOCAL_LIBS...
Cos&igrave;, la prima cosa da provare era di modificare il Makefile invertendo
le $(LOCAL_LIBS) e le $(LDLIBS) alla linea 495, dunque ora si 
dovrebbe leggere:
<BLOCKQUOTE><CODE>
<PRE>
        $(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LDLIBS) $(LOCAL_LIBS)
$(EXTRA_LOAD_FLAGS)                          ^^^^^^^^^^^^^^^^^^^^^^^
</PRE>
</CODE></BLOCKQUOTE>
<P>Provai ad eseguire di nuovo <EM>make</EM> con i suddetti cambiamenti e, 
guarda un po', stavolta funzion&ograve;. Xscrabble aveva ancora bisogno 
di qualche aggiustamento ed una messa a punto, ovviamente, come cambiare 
nome al dizionario e togliere il commento da qualche statement assert in 
uno dei file sorgenti, ma da allora mi ha fornito svariate ore di 
divertimento.
<P>
<P>
<P>[Notate che ora &egrave; disponibile una nuova versione di Xscrabble in formato
rpm, e questa si installa senza problemi.]
<P>
<P>
<P>
<P>Potete contattare 
<A HREF="mailto:matt@belgarath.demon.co.uk">Matt Chapman</A> via e-mail, e scaricare <EM>Xscrabble</EM> dalla sua 
<A HREF="http://www.belgarath.demon.co.uk/programs/index.html">home page</A>.
<P>
<P>
<P>
<P>
<BLOCKQUOTE><CODE>
<PRE>
       Scrabble &egrave; un marchio registrato dalla Milton Bradley Co., Inc.
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P>
<P>
<HR>
<A HREF="Software-Building-HOWTO-10.html">Avanti</A>
<A HREF="Software-Building-HOWTO-8.html">Indietro</A>
<A HREF="Software-Building-HOWTO.html#toc9">Indice</A>
</BODY>
</HTML>