sqlite学习笔记(4)使用TCL测试脚本

 

      sqlite3的源码目录下,有一个TEST文件夹,里面是tcl的测试脚本,对于代码里每个模块的学习,通过运行相应模块的tcl脚本,将有助于对代码的理解,本篇主要讲怎么搭建tcl的测试环境。

1.windows系统下的tcl平台

先下载下载activetcl 8.6.0.0b7

http://dx.mqego.com/soft1/activetcl.zip

新建c工程,在源码环境搭建那一篇文章里已经讲了怎么编译源文件产生sqlite3Shell程序,把那个工程的源代码拷到新建的工程目录下,在源码目录\sqlite-src-3200100\src下把之前删除的tclsqlite3.c和带test的文件拷到工程目录的src子目录里,删掉shell.c,在工程配置里添加头文件路径,除了工程里的路径还要tcl的头文件路径,我的是F:\Tcl\include\tcl8.6。另外还要添加预处理宏如下:

TCLSH

SQLITE_TEST

SQLITE_NEED_ERR_NAME

QLITE_TCLMD5

再添加tcl库,右键工程目录->属性->C/C++常规->路径和符号,在标签栏里选择库,添加tcl86,然后在库路径里添加activetcl的安装路径,我的是F:\Tcl\bin

      编译有很多错误,需要对源代码稍加修改:

undefined reference to `windirent_getenv'”错误,把windirent_getenv改为getenv

undefined reference to `sqlite3_amatch_init'等错误,在test1.c6901行,把tclLoadStaticExtensionCmd函数的内容注释掉,仅留下return TCL_OK;

multiple definition of `sqlite3_api'错误,把SQLITE_EXTENSION_INIT1改为SQLITE_EXTENSION_INIT3,有2处要改;

undefined reference to `_imp__Sqlite3_Init',在tclsqlite.c3515行把Sqlite3_Init函数前的EXTERN去掉;

注释掉以下代码:

extern int Fts5tcl_Init(Tcl_Interp *);

      extern int SqliteRbu_Init(Tcl_Interp*);

Fts5tcl_Init(interp);

SqliteRbu_Init(interp);

处理完以上错误后生成sqlite3tcl扩展程序,该程序可以执行源码目录里的各种tcl脚本

这个是我编译好的sqlite3tcl扩展工程:

http://download.csdn.net/download/pfysw/10132138

2.linux系统下的tcl平台

      下面介绍linux平台下怎么搭建tcl运行平台,首先下载tcl源码,我下的是tcl8.7a1

https://sourceforge.net/projects/tcl/files/Tcl/8.7a1/

下载后解压,然后用cd命令切换到…/tcl8.7a1/unix,分别执行以下三个命令(需要root权限):  ./configuremakemake install

安装好后,在/usr/local/lib目录下可以看到libtcl8.7.so,这个库在之后的编译中会用到。

   接下来用eclipse编译tcl扩展的代码,先安装eclipse-cdt,直接用命令sudo apt-get install eclipse-cdt 就可以安装了。

安装好后,打开elipse新建一个c工程,把上面说的那份源代码拷到工程目录下,添加

头文件路径…/src…/src/make_gen,接下来要添加编译时需要的库,有4个如下图:

clip_image002

编译后就可以生成tcl的执行文件了。

 

3搭建eclipse下的tcl运行环境

      先要安装tcl插件,打开eclipse,选择菜单Help->Install New SoftWare,点击Add,在Archive下可以选择输入下载的网址http://download.eclipse.org/technology/dltk/updates在线安装,也可以在文件目录里选择下好的插件包直接安装。

           具体操作参考这篇文章 http://blog.csdn.net/hyholine/article/details/8252761

      安装好后就可以新建tcl工程,添加tcl执行器为F:\Tcl\bintclsh.exe之后就可以运行tcl脚本了,由于active里的tclsh.exe并没有扩展sqlite3,所以想把Interpreters里的tclsh.exe换成上面源代码生成的tcl扩展程序,但是选择之后不行,显示Interpreters return abnormal exit code1,目前不知道怎么解决。

      其实tclsh.exe就是执行tcl脚本,而插件的作用就是管理代码、阅读编辑代码的作用,执行时可以在终端执行,把tcl扩展程序放在工程目录下,在eclipse打开一个本地终端,切换到工程目录,用tcl扩展程序执行脚本就可以了,比如执行main.test,输入命令:

tclsqlite3.exe main.test就可以了

clip_image004

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值