在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 databasen"); //这里改了。要是按原先的,会提示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: %sn",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 object file: 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! (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|