私は ScrabbleTM
にハマっているので、Matt Chapman の
Xscrabble
がとても面白そうなプログラムに思えました。私は、こ
れをダウンロードして、展開した後、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 は 2 つありますが、私は src
ディレクトリにある方の
Makefile に注目しました。Makefile の中で
「LOCAL_LIBS = $(XAWLIB) $(XMULIB) $(XTOOLLIB) $(XLIB)」
のように LOCAL_LIBS を定義している部分がありました。これらは、
はリンカが見つけられ損ねているライブラリを参照しています。
次に 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 は the Milton Bradley Co., Inc の登録商標です。