分类: LINUX
2009-10-09 21:54:59
基于S3C2440的SQLite移植
一、环境介绍
1、主机环境:虚拟机下Fedora9
2、交叉编译器:arm-linux-gcc-
3、软件包:sqlite-
4、把sqlite-
二、移植步骤
1、配置SQLite
在sqlite目录下进行如下配置:
./configure --prefix=/opt/studyarm/SQLite-transplant/sqlite_arm --disable-tcl --host=arm-linux
2、编译
make
3、安装
make install
该命令将编译好的文件安装到sqlite-arm目录下,在sqlite-arm目录下会生成bin、lib、include目录,bin目录下是sqlite3可执行文件,lib目录下包含运行sqlite3所依赖的库,另外在编译,另外在编译sqlite应用程序时,必须指明所依赖的头文件和库。
4、去掉调试信息(可选)
文件编译后会产生许多调试信息,下载到开发板将会占用较多存储器。我在编译后lib目录下文件大小达到2.2M,占用了不少Flash,为减小Flash占用去掉不必要的调试信息。在sqlite_arm目录下执行如下命令:
arm-linux-strip bin/*
arm-linux-strip lib/*
去掉调试信息后文件大小减小许多。将sqlite_arm /bin目录下的文件sqlite3拷贝到根文件系统的bin目录下,并将sqlite_arm/lib目录下的文件拷贝到根文件系统的lib目录下。
三、测试
1、新建数据库
[rootMrFeng]#sqlite3 test.db SQLite version Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> create table film (number,name); sqlite> insert into film values (1,'aaa'); sqlite> insert into film values (2,'bbb'); sqlite> select * from film; 1|aaa 2|bbb sqlite>.quit [rootMrFeng]# |
蓝色部分为输入。
2、测试程序
这里以SQLite官方站点的quick start文档中的测试程序为例对移植到ARM-Linux上的SQLite3进行测试。该程序清单如下:
//test_sqlite.c #include #include static int callback(void *NotUsed, int argc, char **argv, char **azColName) { int i; for(i=0; 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]); } rc = sqlite3_open(argv[1], &db); if( rc ) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); } rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); if( rc!=SQLITE_OK ) { fprintf(stderr, "SQL error: %s\n", zErrMsg); } sqlite3_close(db); return 0; } |
使用如下命令编译测试程序:
arm-linux-gcc -o test_sqlite test_sqlite.c -lsqlite3 -L/opt/studyarm/SQLite-transplant/sqlite_arm/lib -I/opt/studyarm/SQLite-transplant/sqlite_arm/include
使用如下命令去掉调试信息:
arm-linux-strip test_sqlite
3、在上面新建的数据库目录下测试:
[rootMrFeng]#./test_sqlite test.db "select * from film" number = 1 name = aaa number = 2 name = bbb [rootMrFeng]# |