大顽石

凡事太紧,缘分必早尽

  IT博客 :: 首页 :: 联系 :: 聚合  :: 管理
  9 Posts :: 0 Stories :: 14 Comments :: 0 Trackbacks

快速安装方法:

1,安装activestate activeTcl 8.4.15.0

2,把我的附件解压。

3,在我附件解压后的"tcldp-win目录下,用文本打开teki.tcl,修改set tcl_pkgPath的值,指定到你安装activestate activeTcl 8.4.15.0后,相应的目录下。

4,activestate activeTcl 8.4.15.0的目录\Tcl\lib\tclib_critcl下的critcl.tcl文件拷贝到\lib下,还有啥目录我忘了,反正后面运行teki.tcl的时候,它抱怨在哪里找不到,就把它拷贝到哪里。

5,修改activestate activeTcl 8.4.15.0的目录"lib"xotcl1.5.3下的pkgIndex.tcl,把unset __dir__给注释掉,如:# unset __dir__

6,回到dp的解压目录"tcldp-win下,运行teki.tcl。如果不出意外,应该就OK啦。

7,进入安装后的dpdemo目录下,可以运行conference目录下的例子,应该没有问题了。这个例子如何玩,请参看它的readme

dp文件下载链接(这是我调整过的源码。):/Files/bigstone1998/tcldp-win_bugfix.rar

 

1.1.     Windows下编译安装

目标:已经有了activestate activeTcl 8.4.15.0的工具。现在想把TCL-DP扩展也安装进去。

准备:

tcl843的源码

Tcl-dpsrctcldp-win.tar.tar 4.0版本的。下载后进入到它的win目录下就可以看到版本。)

Tcl-dpbin(可选):dp40b2-win32.zip

我的惨痛教训是:下载的dp40b2-win32.zip肯定不是基于TCL8.4的。我费了大力安装好后,运行demo程序就出现异常。所以我们现在先把它放一边。如果你的TCL正好和他匹配的话,没准就节省了编译的活了。

首先保证你的tcl843windows下是编译成功的。成功后,把release目录下的tcl84.lib拷贝到win目录下,这个后面dp编译的时候会来找。

然后把dp的源码和tcl843的源码并放在一个目录下,如下:

----|

   |---tcl8.4.3

   |---tcldp-win

下载的dp40b2-win32.zip解压后,准备编译。

 

先把VCBin目录下的VCVAR32S.bat拷贝到tcl-dpwin目录下。


为了方便,我自己做了一个bat文件:

set TOOLS32=E:\Progra~1\Micros~1\VC98
set TCL_GENERIC_DIR=E:\PROGRAMEinfo\TCL\tcl843-src\tcl8.4.3\generic
set TCL_ROOT_DIR=E:\PROGRAMEinfo\TCL\tcl843-src\tcl8.4.3
nmake -f makefile.nmake

makefile.nmake不是源文件包中带的,是我自己基于makefile.80修正的。这可是费了老大的力气,根据错误报告,一点一点更改过来的。

同时,根据报告的错误,对genericwin下的源码进行了修改。修改的地方,大家可以自己去看。当然,我这种修改只保证在tcl8.4.3下编译是没有问题。

 

先运行VCVAR32S.bat,再运行build.bat

……

……

好费劲,终于编译成功了。是否能够用,还要用teki.tcl来吧这个dp挂到tcl上才知道。我的TCL是通过activestate activeTcl 8.4.15.0安装的。

运行teki.tcl。又是一堆问题。一个一个解决吧。

首先,是set tcl_pkgPath  "E:\\Program Files\\TclPro1.4\\win32-ix86\\lib"
添加到teki.tcl中。这个含义是告诉teki.tcl,我的TCLpackage的目录。

然后teki.tcl又会抱怨说有critcl.tcl找不到。其实这个文件就在\Tcl\lib\tclib_critcl下。没办法,把这个文件一个一个拷贝到teki.tcl要的目录下。终于安装好了。可以用了。

注意,通过teki.tcl查看dp包时候,它还报告要tcl7.6,别管它。OK啦。


 

1.2.     Linux下的安装

 

1.2.1.     97版的dp40b2的安装

tcl-8.4.12-4.src.rpm进行安装。rpm -ivv *****。安装好后,源码还是直接看不到的。在/urs/src/redhat/sources下,可以看到tcl8.4.12-src.tar.gz

/usr/src/redhat/specs目录下,运行:

rpmbuild -bp tcl**.specs

最后的源码放在/usr/src/redhat/build下。

如果你是安装redhat的时候默认安装了TCL,那么它的程序会放在/usr/shar/tcl8.4下。

好。现在虽然源码是8.4.12,运行版本是8.4.7,但是我不想动了。就这样凑合着编译吧。

dp的源码解压,拷贝到刚才的TCL源码同级别的目录下。这样他们是兄弟目录。

----|

   |---tcl8.4.12

   |---tcl-dp

接下去要配合configure文件做些调整。首先,在/usr/lib/tcl8.4下面找找看有没有tclConfig.sh文件。没有?在/usr/lib下面找找看。找到了,拷贝到/usr/lib/tcl8.4下。我们等会儿用:

./configure --with-tcl=/usr/lib/tcl8.4

来配置。之所以要把那个文件移到/usr/lib/tcl8.4下面,是因为该死的configure通过目录来判别tcl的版本。如果没有tcl8.4,它就默认为tcl7.6

首先,要把/usr/lib/tcl8.4下的tclconfig.sh给更改一下,如下:

TCL_INCLUDE_SPEC=’-I/usr/src/redhat/BUILD/tcl-8.4.12/tcl8.4.12/generic’

TCL_SRC_DIR=’/usr/src/redhat/BUILD/tcl-8.4.12/tcl8.4.12

接下去要改的就是configure文件了。这个我实在没有办法。在configure文件中找类似

if test $TCL_VERSION -eq 7 ; then

这样一句话。在tclConfig.sh中,TCL_VERSION被定义为8.4。这个值是带小数点的。而test的比较这种语法只能用整数。所以,我改为:

if test $TCL_MAJOR_VERSION -eq 7; then

TCL_MAJOR_VERSION也是在tclConfig.sh中定义的。

然后,./configure ./configure --with-tcl=/usr/lib/tcl8.4

成功。

make,也成功。

cd ..

./teki.tcl,安装。成功后,还是显示7.6,顽固!不过不用管它了。

成功了吗?试试看。运行dp40下面的例子(不用我告诉你,dp40安装在/usr/lib/tcl8.4/dp4.0/examples/conference下吧),wish room.tcl,呵呵,报错,头大了吧。没办法,从TCL8.3以后,TclHasSockets就改名为TclpHasSockets了。

-----胸闷-----

回到dp的源代码,打开dpinit.c。注意,是generic下的,不是unix下的。把TclHasSockets改名为TclpHasSockets,再make一次,teki.tcl先卸载,再安装一次,再验证,恭喜你,应该OK啦。

送佛上西天,好事做到底,干脆告诉你怎么玩room.tclenter.tcl把。

linux下,

1,运行:wish room.tcl

2,然后再开一个窗口,运行tclsh

3,然后在wish的控制台下输入:source enter.tcl。一切稳定后,能够看到TCL的控制台符号%出来。

4,再输入:say How are you?

5,看到什么了吧?

这个版本的dp我感觉没有2003版本的好。下面看2003版本

1.1.2.     dp 2003版本

网络链接http://tcldp.sourceforge.net/,名称是tcldp-unix.tar.tar

我遇到的第一个问题是,我的Linux下的tcl8.4.12,源码也是8.4.12,但是找不到tclConfig.sh文件。胸闷。这个平台的Linux是我新安装的啊。安装的时候,都把tcl给自动安装了,怎么就没有这个文件呢?

没办法。这个文件是configure时候自动生成的。我现在要让它自动生成一个。如果默认运行configure的话,它的目录是(./configure –help中说的):/usr/local/bin, /usr/local/lib等。可是安装linux时候自动安装的tcl的目录不是这个。我查出来是:

-        Tclsh安装在/usr/bin下,

-        其他咚咚在/usr/lib下,

我简直要恨死linux了。

运行./configure --prefix=/usr

这样生成一个tclConfig.sh文件。

在这个文件中,最后把下面两个参数确定一下:

TCL_INCLUDE_SPEC=’-I/usr/src/redhat/BUILD/tcl-8.4.12/tcl8.4.12/generic’

TCL_SRC_DIR=’/usr/src/redhat/BUILD/tcl-8.4.12/tcl8.4.12

好,开始折腾tcl-dp。把接好包的tp安装放到tcl8.4同级别的目录下。运行

./configure --with-tcl=/usr/lib/tcl8.4

然后make。没想到,这次是dpEmail.c编译错了。我没有心情去找原因了,直接在

Dpunix目录下修改make文件:

$(OBJ_DIR)/dpUnixEmail.o: $(UNIX_DIR)/dpEmail.c

       $(CC) $(CC_SWITCHS) –c -DLIB="”$(LIB)"”

字样,修改为:

$(OBJ_DIR)/dpUnixEmail.o: $(UNIX_DIR)/dpEmail.c

       $(CC) $(CC_SWITCHS) -DHAVE_UNISTD_H –c -DLIB="”$(LIB)"”

然后make,就好了。



最后,谈一下winxp下面的expect的调整。

 

出现第一个问题:spawn一个进程后,马上出现错误报告,程序退出。细节就不说了,但是,你看看报告中的关键字,就有dbghelp.dll。上网查了半天,终于知道是winxp的这个dll太垃圾。我从win2003 server上找了个2005/1/30日的dbghelp.dll5.2.3790),就不会出错了。注意,有些情况下,要进入安全模式才能够覆盖掉原来的文件。(重启时候F8进入安全模式)

出现的第二个问题:spawn ping xxx.xxx.xxx.xxx后,居然expect不到任何东西。只能够匹配到eof,也就是说spawn出来的进程,马上给关掉了!这个问题我查了半天,终于明白是windows的一个DEP的机制在做怪。详情可以参考:http://support.microsoft.com/kb/875352/zh-cn,但是我这里要说的就是如何把它搞定:

我的电脑->属性->高级->启动和故障恢复->设置->要手动编辑启动选项,请单击“编辑”

在跳出来的boot.ini中,把/noexecute=optin修改为/noexecute=AlwaysOff。保存,重启机器,就好了。

posted on 2008-08-05 10:17 大顽石 阅读(2178) 评论(1)  编辑 收藏 引用

Feedback

# re: activeTcl 8.4.15.0下的tcl-dp扩展安装,以及Linux下的tcl-dp安装,winxp下的expect问题修复 2008-08-05 21:00 wahaha
用tcl的可是稀有动物了,除了偶尔在win下要expect时不得不用到,没多大用处....  回复  更多评论
  

只有注册用户登录后才能发表评论。