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水木清华站∶精华区