<!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é si dà 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ò...</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ò nel newsgroup <A HREF="news://comp.os.linux.x">comp.os.linux.x</A>, e qualcuno gentilmente mi indicò 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ò 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ì! Le librerie mancanti erano qui. <P>È possibile che il linker avesse bisogno di vedere le LDLIBS prima delle LOCAL_LIBS... Così, 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ò. 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 è 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 è 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>