WWW

[알림판목록 I] [알림판목록 II] [글목록][이 전][다 음]
[ WWW ] in KIDS
글 쓴 이(By): wgchoe (D-147)
날 짜 (Date): 1997년07월18일(금) 00시44분25초 KDT
제 목(Title): Re: wgchoe님....(about lynx compile....)




 음.. 아주 이상한 일이군요.. 왜그럴까.
일단 wattroff 가 쓰이는 곳은, LYCurses.h  의 라인 104 를 보면 이게 다른 걸로
디파인 이 되어 있읍니다.

#define start_reverse()   wattrset(stdscr,A_DIM)
#define wstart_reverse(a) wattrset(a,A_DIM)
#define stop_reverse()    wattroff(stdscr,A_DIM)
#define wstop_reverse(a)  wattroff(a,A_DIM)
#else
#define start_reverse()   attrset(A_REVERSE)
#define wstart_reverse(a) wattrset(a,A_REVERSE)
#define stop_reverse()    attroff(A_REVERSE)
#define wstop_reverse(a)  wattroff(a,A_REVERSE)

 즉, stop_reverse 와 wstop_reverse 가 wattroff 로 정의가 되어 있구요, 이건 다시
/usr/include/curses.h 를 보면, wattroff 가 w32attrof 로 정의가 되어 있습니다.
즉, 제일 먼저 curses.h 가 인클루드 되면서 wattroff -> w32attrof 로 되고,
그리고 LYClean.h 가 들어 오면서 stop_reverse -> wattroff -> w32attroff 로
되는거죠. 그러니까, 사실은 w32attroff 라는 함수를 불러야 하는데.. 그런데 왜 
wattr_off 를 부를까..

 grep 으로 찾아 보면, stop_reverse 는 LYForms.c, LYLocal.c, LYUtils.c 등
여러개의 파일에서 쓰입니다.

.. 만약 헤더 파일의 문제라면, 이 소스 들에선 전부 stop_reverse 를 wattr_off
라고 잘못 알아 먹겠죠. 그럼.. 이렇게 한번.

  foreach file (*.o)
   echo $file 
   nm $file | grep wattr
   end

이렇게 하면 어떤 파일에 wattr_off 가 링크 되나 알 수 있을겁니다. 이것을,
stop_reverse(또는 wstop_reverse) 가 들어 있는 파일의 이름과 비교 해 보세요.
또하나는, 매크로의 잘못 이라면, 다음과 같이 해 보시죠.

 1. LYClean.o 를 지운다.
 2. 위에 가서 make solaris2 를 한다 (물론 실패한다)
 3. src 로 가서, make 에서 나온 컴파일 커맨드를 따서, gcc -g 를 gcc -E 로 
바꾼다. (pre-processing 만 하는겁니다.) 뒤의 -o LYClean.o 도 없애고, 아웃ㅗ�
을 다른 파일에 받는다. 제 컴 에서는,

 gcc -E -DFANCY_CURSES -DUNIX -DSOLARIS2 -I../WWW/Library/Implementation
   -DCURS_PERFORMANCE -DNO_UTMP -DUSE_DIRENT -I.. -c LYClean.c > aaa.c

 4. aaa.c 에 가서, 도대체 어디에 wattr_off 가 나오나 본다. 라인 넘보가 있으니
원래 소스와 비교 해 본다. 

 음... 그럼 한번 해 보세요..
[알림판목록 I] [알림판목록 II] [글 목록][이 전][다 음]
키 즈 는 열 린 사 람 들 의 모 임 입 니 다.