一、sqlite数据库的编译:
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步)
Makefile文件的修改情况:
|
位置
之前
之后
17行
TOP = ../sqlite
TOP = .
73行
TCC = gcc -O6
TCC = arm-linux-gcc -O6
81行
AR = ar cr
AR = arm-linux-ar cr
83行
RANLIB = ranlib
RANLIB= arm-linux-ranlib
86行
MKSHLIB = gcc -shared
MKSHLIB = arm-linux-gcc -shared
注释掉
TCL_FLAGS = -I/home/drh/tcltk/8.4linux
LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm-ldl
接下来,还需要修改的一个的文件是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)
二、sqlite数据库的移植:
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。
4、然后执行下列命令新建一个数据库test.db:
/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.迷惑细说
-I 指明了头文件sqlite3.h所在的目录;
-L 指定了库函数文件libsqlite3.a所在的目录
-lsqlite3 指明要链接静态库文件libsqlite3.a
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
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!