费了很大力气才下到Expect的源代码,然后参考了Expect的INSTALL说明文件,还需要Tcl/Tk的源代码支持,于是又下载了Tcl/Tk的源代码,把它们都给放到/usr/local/src下面。先编译安装tcl和tk,完了之后进入expect的文件夹下面,./configure,结果报错,说找不到tclInt.h。于是在tcl的源文件的文件夹下面搜索tclInt.h,发现该文件确实存在,在generic下面。又参考了一下Expect的INSTALL说明文件,才知道可以加--withtclincluse=选项,于是重新configure:

 

./configure --withtclinclude=/usr/local/src/tcl8.6b1/generic

 

configure成功。于是输入make,正式编译,结果又发现了如下错误:

 

exp_main_exp.c:32: error: ‘Tcl_Interp’ has no member named ‘result’
exp_main_exp.c:33: warning: incompatible implicit declaration of built-in function ‘exit’
make: *** [exp_main_exp.o] Error 1

 

网上一搜,在http://groups.google.com/group/comp.lang.tcl/browse_thread/thread/e63b1bd2d350d024/8bbd5758f6193120?show_docid=8bbd5758f6193120&pli=1
发现有人遇到过同样的问题。在http://www.tcl.tk/cgi-bin/tct/tip/330.html
给出了原因,说是因为在新版(8.6)的tcl的tcl.h中Tcl_Interp被重命名为unused1了,而expect的源代码并没有做相应修改。并且给出了解决方案,就是添加预定义USE_INTERP_RESULT,或者用8.5以下的tcl源代码。

 

我没有再继续尝试编译安装expect。我想起来可以尝试通过yum安装,于是输入yum install expect,竟然成功了!不过在安装expect的同时,还自动安装了tcl8.5.3,估计这是因为安装的expect是基于tcl8.5的源代码变异的。

 

看来Expect开发者乏人啊,这么长时间这个bug竟然没有人修复,唉……