Next Previous Contents

9. 第一个例子:Xscrabble

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 libs 函数库在链接的位置没有找到。

那里有两个主要的 Makefiles ,一个在 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
对!这里是缺少的函数库。

或者这个链接需要在 在看 LDLIBS 之前的 LOCAL_LIBS……那么,首先认为尝试在 Makefile 修改 $(LOCAL_LIBS) 和 $(LDLIBS) ,替换第 495 行,因此现在应该阅读:

        $(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LDLIBS) $(LOCAL_LIBS)
$(EXTRA_LOAD_FLAGS)                          ^^^^^^^^^^^^^^^^^^^^^^^
我经过上述的修改试验后再次运行 make ,看!它已经工作了。当然, Xscrabble 仍然需要更好的调试,比如在源码文件里重命名关键字和注释一些声明。从那以后它给了我很多愉快的时光。

[提示有最近的 Xscrabble 版本现在有了可用的 rpm 格式,而且安装没有任何问题。]

你可以用 e-mail 发给 Matt Chapman, ,而且它的 主页. 可提供 Xscrabble 的下载

       Scrabble 是 Milton Bradley 有限公司的注册商标。


Next Previous Contents