다음 이전 차례

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 라이브러리가 링크 단계에서 발견되지 않았음이 틀림없다고 친절하게 가르쳐 주었다. 흠...

패키지에는 두 개의 주된 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.의 등록된 상표이다.


다음 이전 차례