zhcon安装过程记录
参考资料:
1. http://www.linuxdiyf.com/viewarticle.php?id=81796
需要下载的文件有两个:zhcon-0.2.5.tar.gz和zhcon-0.2.5-to-0.2.6.diff.gz。
下载地址:http://sourceforge.net/project/showfiles.php?group_id=27400
windows下载(先用WinRAR解压得到两个文件):http://www.namipan.com/d/zhcon0. ... 49149f7f1932c784c00
将两个文件下载到/root目录下(也可以将文件下载到喜欢的别的目录)。
1.解压并解包zhcon-0.2.5.tar.gz文件:
[root@dhwch]# tar zxvf zhcon-0.2.5.tar.gz
解压之后在/root目录下得到一个zhcon-0.2.5目录。
[root@dhwch]#cd zhcon-0.2.5
[root@zhcon-0.2.5]#zcat ../zhcon-0.2.5-to-0.2.6.diff.gz | patch -p1
或者:
将zhcon-0.2.5-to-0.2.6.diff.gz解压:
[root@dhwch]# gzip -d zhcon-0.2.5-to-0.2.6.diff.gz
解压后得到zhcon-0.2.5-to-0.2.6.diff补丁文件,用下面的命令将此文件打补丁到zhcon-0.2.5的源代码中:
[root@dhwch]# patch -p0 < zhcon-0.2.5-to-0.2.6.diff
把0.2.5版本的zhcon升级到0.2.6版本,接下来
[root@dhwch zhcon-0.2.5]# ./configure
[root@dhwch zhcon-0.2.5]# make
[root@dhwch zhcon-0.2.5]# make install
这样,中文控制台终端zhcon就安装好了。要使用zhcon,只需要在控制台下键入命令:
[root@dhwch zhcon-0.2.5]# zhcon
即可。
在这个文档里有几点没有说清楚:
1). 在使用make编译源代码的时候出现了很多的错误,主要原因有:一些源文件没有引入必要的头文件、缺少常量的宏定义、以及在Makefile文件中的编译依赖中缺少必要的链接包,于是又参考了下面两份资料:
http://blog.sina.com.cn/s/blog_637fe9d80101561k.html
curses.h: 没有那个文件或目录
fblinear4.cpp:75: 错误:‘memset’在此作用域中尚未声明
如果SUSE 下安装zhcon出问题,这里是第一个报错的地方。我也在网上搜了一下,有人说是gcc4.3开始头文件的变更,让我想起去看看这个版本的时 间,2006-05-04,即便是那个2.6的patch也已经过时了。但毕竟用zhcon的人已经越来越少了,所以我只要把思路给出来,也不去做 patch了。
在zhcon的make过程中,有很多次报错,说缺少memset,memcpy等函数的定义,是缺少#include <string.h>;有几次缺少abs,atoi,free等的定义,是缺少#include <stdlib.h>;还有报fd_set结构的定义,是缺少#include <sys/select.h>;另外,缺少几个常量定义,我从以前版本的内核头文件中找到,然后写入了src/lrmi.c中(好像就是这个 文件缺),共用到如下几个量:
#define VIF_MASK 0x00080000 /* virtual interrupt flag */
#define IF_MASK 0x00000200
#define IOPL_MASK 0x00003000
#define TF_MASK 0x00000100
如果有人 遇到同样的问题,希望对你有帮助。
所有增加的内容,写入到 config.h 中 :
include <memory.h>
#include <stdlib.h>
#include <sys/select.h>
#define VIF_MASK 0x00080000 /* virtual interrupt flag */
#define IF_MASK 0x00000200
#define IOPL_MASK 0x00003000
#define TF_MASK 0x00000100
另外这些以后还会有一个文件报错。到时候添加一个 #include <stdlib.h> 即可。
环境:kernel 2.6.27
gcc-4.3.2
这里讲的将这些缺少的东西写在 configure文件中,我是在每个缺少的文件中都添加上了。
在参考上面的资料后出现了 undefined reference to `tgetent' 的错误,参考http://blog.csdn.net/azhang00000/article/details/2936551
LINUX readline 库的使用,,
编译代码时必须链接libreadline 与libtermcap
基只有前者,,将会有如下的链接失败
/usr/lib/libreadline.so: undefined reference to `tgetnum'
: /usr/lib/libreadline.so: undefined reference to `tgoto'
: /usr/lib/libreadline.so: undefined reference to `tgetflag'
: /usr/lib/libreadline.so: undefined reference to `BC'
: /usr/lib/libreadline.so: undefined reference to `tputs'
: /usr/lib/libreadline.so: undefined reference to `PC'
: /usr/lib/libreadline.so: undefined reference to `tgetent'
: /usr/lib/libreadline.so: undefined reference to `UP'
: /usr/lib/libreadline.so: undefined reference to `tgetstr'
Makeifle (eg):
read: read.o
gcc -o read read.o -I/usr/include -lreadline -ltermcap
read.o: read.c
gcc -c read.c -lreadline
从上面的文档中可以知道这个错误是Makefile文件中没有引入 -ltermcap包导致
参考了上面的文档,然后枯燥的添了一下午的包和头文件终于编译通过,出现了等待已久的运行界面:
虽然运行起来了,但是使用相当不方便,而且漏洞百出。后来我在百度知道中得知该软件已不会再维护了。想着这东西也确实不是使用中文的利器。找到好的后果断换掉!