linux debian配置tcl环境,编译tcl扩展库

在linux中配置tcl环境是非常容易的,但是第一次做,走了一些弯路,现在记录下。

1、在linux中  apt-get install 安装的程序不一定是最新程序。

2、由于是通过apt-get install tcl 安装的tcl版本为8.5.11,又在http://www.activestate.com/activetcl/downloads下载了tcl的最新源码,编译安装了tcl,版本为8.6。在linux中自己手动安装tcl,步骤很清晰,记得看README,将tcl安装到了/usr/tcl8.6中,编译tcl扩展库libex.so,代码在后面:gcc -shared -o libex.so -DUSE_TCL_STUBS ex.c -I /usr/tcl8.6/include/tcl8.6 -L /usr/tcl8.6/lib -ltclstub8.6,一直编译失败,但是会提示 编译时添加 -fPIC ,于是编译成功,生成了 libex.so

3、在使用 libex.so时,又出错: package  TCL  使用的是 tcl8.5.11 , 需要使用tcl8.6

4、利用 dpkg -l  查看安装的tcl版本,利用dpkg  -r  将 tcl8.5   tk8.4  tcl8.4都卸载,如果卸载不干净,利用dpkg --purge 继续清除,如果还是清除不干净,就先将tcl8.6卸载,再清除。

5、最后重新编译tcl8.6  将bin下的tclsh  copy到/usr/bin

代码:

<span style="font-size:14px;">//linux 下 简单的tcl扩展库实现
#include <stdio.h>
#include <tcl.h>

static int Hello_Cmd(ClientData cdate,Tcl_Interp *interp,int objc,Tcl_Obj *const objv[])
{
    Tcl_SetObjResult(interp,Tcl_NewStringObj("Hello,World!",-1));
    return TCL_OK;
}
int DLLEXPORT Ex_Init(Tcl_Interp *interp)
{
    if(Tcl_InitStubs(interp,TCL_VERSION,0) == NULL)
    {
        return TCL_ERROR;
    }
    if(Tcl_PkgProvide(interp,"Hello","1.0") == TCL_ERROR)
    {
        return TCL_ERROR;
    }
    Tcl_CreateObjCommand(interp,"hello",Hello_Cmd,NULL,NULL);
    return TCL_OK;
}</span>

加载使用tcl 扩展库 use.tcl

<span style="font-size:14px;">#!/usr/bin/tclsh

load [file join [pwd] libex[info sharedlibextension]]
puts [hello]</span>
另:windows 中 load [file join [pwd] foo.dll]

最后运行程序

tclsh use.tcl




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值