Chinaunix首页 | 论坛 | 博客
  • 博客访问: 396884
  • 博文数量: 115
  • 博客积分: 2501
  • 博客等级: 少校
  • 技术积分: 1009
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-23 17:05
文章分类

全部博文(115)

文章存档

2011年(2)

2010年(86)

2009年(27)

我的朋友

分类: LINUX

2009-10-09 21:54:59

 

基于S3C2440SQLite移植

一、环境介绍

1、主机环境:虚拟机下Fedora9

2、交叉编译器:arm-linux-gcc-4.3.2

3、软件包:sqlite-3.6.18.tar.bz2

4、sqlite-3.6.18.tar.bz2解压到主机的/opt/studyarm/SQLite-transplant目录下,并重命名为sqlite,在同一级目录下在新建目录sqlite-arm,这个目录来放编译后产生的文件。

二、移植步骤

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目录下会生成binlibinclude目录,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 3.6.18

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]#

 
 
 
 
交流邮箱:
 
阅读(1185) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~