@H_404_1@1、获得sqlite嵌入式数据库源码,本项目用的是sqlite-3.3.6.tar.gz。
@H_404_1@将sqlite-3.3.6.tar.gz下载到/root目录下。然后,通过下列命令解压缩sqlite-3.3.6.tar.gz:
@H_404_1@# tar zxvf sqlite-3.3.6.tar.gz(第1步)
@H_404_1@进入sqlite-3.3.6目录,在sqlite-3.3.6/目录下有一个Makefile范例文件Makefile.linux-gcc。首先通过下面的命令拷贝此文件并重命名为Makefile:
@H_404_1@#cp Makefile.linux-gcc Makefile(第2步)
@H_404_1@4、接下来,用vim打开Makefile文件并手动修改Makefile文件的内容。
@H_404_1@#vim Makefile(第3步)
|
@H_404_1@接下来,还需要修改的一个的文件是main.mk,因为Makefile包含了这个文件。
@H_404_1@#vim main.mk (第4步)
@H_404_1@select.o table.o tclsqlite.o tokenize.o trigger.o /
@H_404_1@把它替换成:
@H_404_1@select.o table.o tokenize.o trigger.o / 也就是把该行上的tclsqlite.o去掉。
@H_404_1@5、最后就可以make了:/root/sqlite-3.3.6/make。
@H_404_1@#make (第5步)
@H_404_1@编译完成之后,将在sqlite3.3.6/目录下生成数据库文件sqlite3、库函数文件libsqlite3.a和头文件sqlite3.h。
大地小神补充:(上面方法可能出错) @H_404_1@若继续使用上面的方法, Hit the link below!: http://www.elecfans.com/article/87/141/2010/20100311186619.html @H_404_1@主机环境:虚拟机Ubuntu9.0 @H_404_1@交叉编译器:arm-softfloat-linux-gnu-gcc @H_404_1@软件包:sqlite-3.6.17.tar.gz @H_404_1@步骤 0: mkdir /home/linux/sqlite @H_404_1@步骤 1: cp sqlite-3.6.17.tar.gz /home/linux/sqlite @H_404_1@步骤2: tar zxvf sqlite-3.6.17.tar.gz @H_404_1@步骤3: cd sqlite-3.6.17 @H_404_1@步骤4: ./configure --prefix=/home/linux/sqlite / @H_404_1@--disable-tcl / @H_404_1@--host=arm-softfloat-linux-gnu @H_404_1@步骤5: make & make install @H_404_1@步骤6: cd.. (include lib bin) |
@H_404_1@1、去掉/root/sqlite3.3.6目录下的sqlite3的调示信息:
@H_404_1@arm-linux-strip sqlite3(第6步 /home/linux/sqlite/bin)
@H_404_1@2、将sqlite3下载到开发板的/usr/bin目录:
@H_404_1@cp sqlite3 /usr/bin(第7步)
@H_404_1@3、在PC机的目录/usr/lib 中找到libsqlite3.so.0、libsqlite3.so.0.8.6这两个库文件,去掉调示信息后把它们复制到开发板的/usr/lib目录下:
@H_404_1@arm-linux-strip libsqlite3.so.0 (/home/linux/sqlite/lib)
@H_404_1@arm-linux-strip libsqlite3.so.0.8.6 (/home/linux/sqlite/lib)
@H_404_1@cp –arf libsqlite3.so.0 libsqlite3.so.0.8.6 /usr/lib (第8步)
@H_404_1@注:因为libsqlite3.so,libsqlite3.so.0是链接到libsqlite3.so.0.8.6的,所以拷贝是要加-arf。 |
@H_404_1@4、然后执行下列命令新建一个数据库test.db:
@H_404_1@/usr/bin#sqlite3 test.db(第9步 开发板)
@H_404_1@进入sqlite>模式:.help可以获取帮助,.databases可以查看当前系统中存在的数据库,.tables可以查看当前数据库中存在的表,.quit和.exit可以退出。
@H_404_1@sqlite> create table student(ID integer primary key,name text);
@H_404_1@sqlite> insert into student values(1,'孙悟空');
@H_404_1@sqlite> insert into student values(2,'唐僧');
@H_404_1@sqlite> insert into student values(3,'猪八戒');
@H_404_1@sqlite> insert into student values(4,'沙和尚');
@H_404_1@sqlite> select * from student;
@H_404_1@sqlite> update student set name='白骨精' where ID='2';
@H_404_1@sqlite>delete from student where ID='2'; (第10步)
@H_404_1@注意:sqlite模式下命令必须以分号“;”结束。
@H_404_1@1、编写测试程序:(第11步)
@H_404_1@static int callback(void *NotUsed,int argc,char **argv,char **azColName) @H_404_1@{ @H_404_1@int i; @H_404_1@for (i = 0; i < argc; i++) { @H_404_1@printf("%s = %s/n",azColName[i],argv[i] ? argv[i] : "NULL"); @H_404_1@} @H_404_1@printf("/n"); @H_404_1@return 0; @H_404_1@} @H_404_1@int main(int argc,char **argv) @H_404_1@{ @H_404_1@char *zErrMsg = 0; @H_404_1@int rc; @H_404_1@if (argc != 3) { @H_404_1@fprintf(stderr,"Usage: %s DATABASE sql-STATEMENT/n",argv[0]); @H_404_1@exit(1); @H_404_1@} @H_404_1@rc = sqlite3_open(argv[1],&db); @H_404_1@if (rc) { @H_404_1@fprintf(stderr,"Can't open database: %s/n",sqlite3_errmsg(db)); @H_404_1@exit(1); @H_404_1@} @H_404_1@rc = sqlite3_exec(db,argv[2],callback,&zErrMsg); @H_404_1@if (rc != sqlITE_OK) { @H_404_1@printf(stderr,"sql error: %s/n",zErrMsg); @H_404_1@sqlite3_free(zErrMsg); @H_404_1@} @H_404_1@return 0; @H_404_1@} |
@H_404_1@2、交叉编译:(第12步)
@H_404_1@#arm-linux-gcc -I /root/sqlite-3.3.6 -L /root/sqlite-3.3.6 -o test test.c -lsqlite3 -static
@H_404_1@瘦身:#arm-linux-strip test
大地小神补充:(有可能出错) @H_404_1@主机环境:虚拟机Ubuntu9.0 @H_404_1@交叉编译器:arm-softfloat-linux-gnu-gcc @H_404_1@软件包:sqlite-3.6.17.tar.gz @H_404_1@1. 类似出错信息: @H_404_1@/home/linux/sqlite/sqlite-3.4.2/libsqlite3.a(os_unix.o)(.text+0x3ec): In function @H_404_1@: undefined reference to `dlopen' @H_404_1@/home/linux/sqlite/sqlite-3.4.2/libsqlite3.a(os_unix.o)(.text+0x3f4): In function @H_404_1@: undefined reference to `dlsym' @H_404_1@/home/linux/sqlite/sqlite-3.4.2/libsqlite3.a(os_unix.o)(.text+0x3f8): In function @H_404_1@`sqlite3UnixDlclose': @H_404_1@: undefined reference to `dlclose' @H_404_1@collect2: ld returned 1 exit status @H_404_1@在编译命令后加 “-ldl” @H_404_1@#arm-softfloat-linux-gnu-gcc -I include -L lib test.c -o test / @H_404_1@3.迷惑细说 @H_404_1@-I 指明了头文件sqlite3.h所在的目录; |
@H_404_1@3、下载到目标板进行测试:(第13步)
@H_404_1@在开发板上新建一个目录:/#mkdir zhao
@H_404_1@/zhao#./test test.db "select * from student"
@H_404_1@ID = 1
@H_404_1@name = 孙悟空
@H_404_1@ID = 2
@H_404_1@name = 唐僧
@H_404_1@ID = 3
@H_404_1@name = 猪八戒
@H_404_1@ID = 4
@H_404_1@name = 沙和尚
@H_404_1@(结束, 国家认证)
@H_404_1@原文来自:
@H_404_1@http://wenku.baidu.com/view/93268269a45177232f60a20b.html