sqlite安装

来源:互联网 发布:多摄像头监控软件 编辑:程序博客网 时间:2024/05/17 00:55

在linux下安装sqlite 


linux平台
:CentOS
Sqlite版本:sqlite-3.5.6

1.源码安装步骤如下:
1)wget http://www.sqlite.org/sqlite-3.5.6.tar.gz
2)tar -xzvf sqlite-3.5.6.tar.gz
3)cd sqlite-3.5.6
4)./configure --disable-tcl ##加上这个选项则不需要TCL,否则在2.4内核上编译通不过
5)make
6)make install

另外:

如果make的时候提示错误

../sqlite-3.5.1/src/tclsqlite.c:2424: error: syntax error before '*' token
../sqlite-3.5.1/src/tclsqlite.c: In function `Tclsqlite_SafeInit':
../sqlite-3.5.1/src/tclsqlite.c:2424: error: `TCL_OK' undeclared (first use in this function)
../sqlite-3.3.5/src/tclsqlite.c: In function `DbUpdateHandler':
../sqlite-3.3.5/src/tclsqlite.c:333: warning: passing arg 3 of `Tcl_ListObjAppendElement' makes pointer from integer without a cast
../sqlite-3.3.5/src/tclsqlite.c: In function `tclSqlFunc':
../sqlite-3.3.5/src/tclsqlite.c:419: warning: passing arg 1 of `Tcl_NewByteArrayObj' discards qualifiers from pointer target type


这个都是tcl相关的错误,可以先安装ActiveTcl以解决.假如你不需要tcl支持,那么这个错误可以这样避免: .

/configure --help 看一下就知道了。可以 加上 --disable-tcl  选项



2.测试是否安装成功

# cd /usr/lcoal/sqlite-3.5.6

# ./sqlite3 text.db


如果安装成功,会出现下面这样的信息

SQLite version 3.5.6

Enter ".help" for instructions

sqlite>

 

编写一个C语言程序并运行。
现在我们来写个C程序,调用 sqlite 的 API 接口函数查询数据库中表的内容。并在该环境中运行。
首先,在sqlite编译成功之后,创建一个sqlite数据库和表,并插入数据。过程如下(在刚才的路径下):
# ./sqlite3 test.db
sqlite>
sqlite提示符出来,就表明成功啦。然后,
sqlite>create table users(name varchar(30) not null, age Integer not null);
sqlite>insert into users values(‘anny’, 20);
sqlite>select * from users;
anny|20 //这就是我输入的记录啦:)
sqlite>.exit //从sqlite数据库中退出,或者用命令.quit(注意前面有一个点)
然后,创建一个目录,用于存放将要编写的C语言程序。
#mkdir /usr/local/te/tool/Linux-i686/sqlite_test
#cd /usr/local/te/tool/Linux-i686/sqlite_test
现在,编写一个名为test.c的C语言程序,用Linux下的文本编辑器。保存在目录/usr/local/te/tool/Linux-i686/sqlite_test下。该程序是根据zieckey编写的test_sqlite.c改编的。源程序如下(修改的部分有注明):
#include <stdio.h>
#include <sqlite3.h>

int main( void)
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if( rc){
printf("Can't open database\n"); //这里改了。要是按原先的,会提示stderr未定义,我不知道为什么。哪位朋友知道一定要告诉我哦。
sqlite3_close(db);
exit(1);
}
else printf("open test.db successfully!\n");
sqlite3_close(db);
return 0;
}

为了比较,给出zieckey所写的test_sqlite.c。

#include <stdio.h>
#include <sqlite3.h>

int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("open zieckey.db successfully!\n");

sqlite3_close(db); //关闭数据库
return 0;
}

最后编译程序test.c。
#gcc test.c –o test.out –lsqlite3 -L/usr/local/te/tool/Linux-i686/sqlite-3.3.6-arm-linux/lib -I/usr/local/te/tool/Linux-i686/sqlite-3.3.6-arm-linux/include
具体的细节问题可以参考zieckey所写的《sqlite3嵌入式数据库的ARM-Linux移置详解[原创]--->为初学者而作》。
编译成功之后,运行test.out。
#./test.out
若出现错误:./test.out: error while loading shared libraries: libsqlite3.so.0: cannot open shared objectfile: No such file or directory,说明运行沿着系统默认路径没有找到库文件。这时需要指定 libsqlite3.so.0 库文件的路径。

在shell下输入:

# export LD_LIBRARY_PATH=/usr/local/te/tool/Linux-i686/sqlite-3.3.6-arm-linux/lib:$LD_LIBRARY_PATH

再运行

# test.out
当提示:
#bash: test.out: command not found
时, 请以下面方式运行:
# ./test.out
正常情况就OK了!

open test.db successfully!

至此,在linux系统下的GNU环境中完成了sqlite的编译和C程序的编译运行。
此外,在开始的时候我说过,对于Tcl有两种处理,一是去掉Tcl的引用,二是安装ActiveTcl。前面讲了去掉Tcl引用的方法。现在顺便介绍一下ActiveTcl的安装(也许它对于很多人来说很简单,但是我在第一次安装的时候出了问题,我想也许还会有朋友会碰到该问题的,因此就写出来,希望对于象我一样刚接触Tcl的朋友会有帮助)。
① 下载最新版本ActiveTcl8.4.13.0.261555-linux-ix86.tar.gz。
② 解压。
# tar zxvf ActiveTcl8.4.9.0.121397-linux-ix86.tar.gz
③ 安装。
#cd ActiveTcl8.4.9.0.121397-linux-ix86
#./install.sh
如果用默认路径 /usr/local/ActiveTcl/ 安装,请在运行install.sh之前,编辑 /etc/profile 文件并加入以下内容
PATH=$PATH:/usr/local/ActiveTcl/bin
export PATH
我第一次出错就是在这里,没有对profile文件进行修改,因此在安装的时候,选择了默认路径/usr/local/ActiveTcl/之后点击next却怎么都过不去!
④ 建立链接
#rm /usr/bin/wish
#ln -s /usr/local/ActiveTcl/bin/wish /usr/bin/wish
注销后重新登陆,OK!