Matt Chapman 的 Xscrabble
看起来像是一个有趣的程序,因为我碰巧是一位狂热的 ScrabbleTM
玩家。我下载了它,解压了它,并按照 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 库。嗯...
这里有两个主要的 Makefile,src
目录中的那个引起了我的兴趣。Makefile 中的一行将 LOCAL_LIBS 定义为:LOCAL_LIBS = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB) 这里提到了链接器没有找到的库。
查找下一个对 LOCAL_LIBS 的引用,我在该 Makefile 的第 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
是的!这里是缺少的库。可能链接器需要在 LOCAL_LIBS 之前看到 LDLIBS... 所以,首先要尝试的是修改 Makefile,将第 495 行的 $(LOCAL_LIBS) 和 $(LDLIBS) 调换位置,使其现在读作
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LDLIBS) $(LOCAL_LIBS)
$(EXTRA_LOAD_FLAGS) ^^^^^^^^^^^^^^^^^^^^^^^
我尝试使用上述更改再次运行 make,瞧,看,这次它工作了。当然,Xscrabble 仍然需要一些微调和调整,例如重命名字典和注释掉其中一个源文件中的一些断言语句,但从那时起,它为我提供了许多小时的乐趣。
[请注意,新版本的 Xscrabble 现在以 rpm 格式提供,并且这个安装没有问题。]
您可以发送电子邮件给 Matt Chapman,并从他的 主页 下载 Xscrabble。
Scrabble is a registered trademark of the Milton Bradley Co., Inc.