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를 보아야 하는 것일 가능성이 있었다. 따라서 처음으로 시도해 볼 일은 495 행의 $(LOCAL_LIBS)와 $(LDLIBS)를 바꿔서 아래와 같이 하는 것이었다.
$(CCLINK) -o $@ $(LDOPTIONS) $(OBJS) $(LDLIBS) $(LOCAL_LIBS)
$(EXTRA_LOAD_FLAGS) ^^^^^^^^^^^^^^^^^^^^^^^
나는 위와 같이 바꿔서 다시 make를 실행해보았고, 이번에는 제대로 실행되었다. 물론 Xscrabble은 아직 디렉터리의 이름을 바꾼다거나 소스 파일 중의 하나에 있는 몇몇 선언문을 주석 처리하는 등, 세부적인 조정과 변경이 필요했지만, 이 패키지는 그 뒤 오랫동안 나를 즐겁게 해주었다.
[새 버젼의 Xscrabble은 이제 rpm 형식으로 구할 수 있으며, 문제없이 설치된다.]
Xscrabble를 얻으려면 Matt Chapman에게 e-mail을 하거나, 그의 홈 페이지에서 다운받을 수 있다.
Scrabble은 Milton Bradley Co., Inc.의 등록된 상표이다.