BBS水木清华站∶精华区

发信人: BlueOcean (Blue), 信区: Linux 
标  题: CXterm5.0在RedHat5.0-下的编译解决方案 
发信站: BBS 水木清华站 (Fri Feb  6 13:29:38 1998) 
 
 
托suxm的福, 我也装了一个RedHat5.0, 觉得还可以, 不过include文件变化很大, 
更加地遵从POSIX标准了. 不过系统少了一个头文件, 即/usr/include/sys/termio.h 
其文件内容如下, (很简单, 以前的Linux都是有的) 
 
------8<------8<------8<------ 
 
/* 
 * Added by Michael L. in compliance with SYSTEM V termio 
 */ 
 
#ifndef _SYS_TERMIO_H 
#define _SYS_TERMIO_H 
 
#include <termio.h> 
 
#endif  /* _SYS_TERMIO_H */ 
 
------>8------>8------>8------ 
 
另外, 关于CXTERM的编译我的经验是只将cxterm的源码改写两处即可. 
 
1. main.c 
line 147: 
 
#ifdef USE_TERMIOS 
#include <termios.h> 
/* this hacked termios support only works on SYSV */ 
#define USE_SYSV_TERMIO 
#define termio termios 
#undef TCGETA 
#define TCGETA TCGETS 
#undef TCSETA 
#define TCSETA TCSETS 
#else /* USE_TERMIOS */ 
/* #ifdef SYSV */                       <--- Here 
#include <sys/termio.h> 
/* #endif */ /* SYSV */                 <--- Here 
#endif /* USE_TERMIOS else */ 
 
现在大多数UNIX都是和SYSTEM V兼容的, 这样的改动可以保证在大多数情况下都适用. 
 
2. misc.c 
line984: 
 
char *SysErrorMsg (n) 
    int n; 

/*    extern char *sys_errlist[]; */    <--- Here 
    extern int sys_nerr; 
 
    return ((n >= 0 && n < sys_nerr) ? sys_errlist[n] : "unknown error"); 

 
主要是gcc的类型检查比较严格, sys_errlist在stdio.h中已有定义, 也可以利用 
gcc的-traditional来不让gcc报错. 
 
觉得cxterm的编写一开始就没注意跨平台的移植性, 总是哪出了毛病就补哪. 有太多的 
不可移植的隐患, 需要整理一下了, :( 
 
【 在 scaner (永远不变坏) 的大作中提到: 】 
 cxterm-5.0在redhat-5.0中无法成功编译,主要的 
 原因是redhat5.0的libc是glibc,而include文件的 
 结构也有很大变化。 
 解决的办法是该改的地方就得改,反正不用考虑多 
 平台编译,也就不用多考虑的很周全。凡是编译时 
 遇到未定义的符号,就到/usr/include里去找相应 
 的定义,再去改源程序。 
 再说一句。main.c里的什么ECHO,C80,B9600什么的 
 原来是定义在/usr/include/bsd/sgtty.h里的, 
 redhat-5.0是在/usr/include/tarmbits.h里。 
 
 
-- 
                                   
    Buck barks in the darkness     
                                   
 
※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: ns.nlsde.buaa.e] 

BBS水木清华站∶精华区