Matt Chapman的 Xscrabble 似乎像是个颇有趣的程序,
因为我曾是个贪婪的 Scrabble™
(拼字游戏)玩家.我下载下,解压,
而且建立它以 README 文档中的下列步骤:
xmkmf
make Makefiles
make includes
make
当然它不能正常运作...
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...
我在 comp.os.linux.x 的新闻群组询问过, 而且有些人好心的指出似乎 Xt, Xaw, Xmu, 和 X11 libs 没有让连结器(linker)找得到. 嗯...
有两个主要的 Makefiles, 而且在 src
目录下的那个让我感兴趣.
在 Makefile 一行有定义 LOCAL_LIBS 成:
LOCAL_LIBS = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) 这所指的 libs
并没有被连结器找到.
找找下个指到 LOCAL_LIBS 的地方, 我看到该在 Makerfile 的495行:
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LOCAL_LIBS) $(LDLIBS)
$(EXTRA_LOAD_FLAGS)
而现在 LDLIBS 是什么呢?
LDLIBS = $(LDPOSTLIB) $(THREADS_LIBS) $(SYS_LIBRARIES)
$(EXTRA_LIBRARIES)
SYS_LIBRARIES 是:
SYS_LIBRARIES = -lXpm -L../Xc -lXc
是个! 就是这样遗失 libraries.
大概连结器需要在 LOCAL_LIBS 之前看到 LDLIBS... 所以, 第一件事要尝试去修改 Makefile 就是改写在495行的 $(LOCAL_LIBS) 和 $(LDLIBS) , 所以它现在变成:
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LDLIBS) $(LOCAL_LIBS)
$(EXTRA_LOAD_FLAGS) ^^^^^^^^^^^^^^^^^^^^^^^
在上面的改后,我试著再次执行 make , 瞧, 它这次可正常跑了. 当然, Xscrabble 仍然需要一些微调(fine tuning]与玩弄(twiddling), 像是重新命名字典以及标注某些辅助的叙述在原始码文档之一, 但正因为那样,它已给我好几个小时的消遣.
你可以寄 e-mail Matt Chapman, 而且从他的 home page 下载 Xscrabble.
Scrabble 是 Milton Bradley Co., Inc. 的注册商标.