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