次のページ 前のページ 目次へ

9. 第1の例:Xscrabble

私は Scrabble[TM] にハマっているので、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 があり、 src ディレクトリにある Makefile に私は関心を 持ちました。 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 形式で入手することができます。また、このパッケージは上記の問題を気にすることなくインストールできます。]

Xscrabble について、e-mail は Matt Chapman ( mailto:matt@belgarath.demon.co.uk) に、 またダウンロードは下記のホームページから出来ます。

http://www.belgarath.demon.co.uk/programs/index.html


         Scrabbleはthe Milton Bradley Co., Incの登録商標です。


次のページ 前のページ 目次へ