EasyARM283移植sqlite3

来源:互联网 发布:java新技术框架 编辑:程序博客网 时间:2024/06/16 06:51

在EasyARM-imx283上移植 sqlite 3.8.4.3

第一:开发环境

zlg ubuntu-12.04 + EasyARM-iMX283+arm-linux-gcc4.4.4

第二:下载sqlite

下载 sqlite 最新版本:3.8.4.3 http://www.sqlite.org/download.html

源码包:sqlite-autoconf-3080403.tar

第三:移植步骤

1.      解压源码包到/opt 目录下:

fab@ubuntu:~$ sudo tar zxvfsqlite-autoconf-3080403.tar.gz  -C /opt

2.      建立 make install 目录

fab@ubuntu:~$  sudo  mkdir /opt/build

3.      进入解压出得文件夹中

fab@ubuntu:~$ sudo  cd /opt/sqlite-autoconf-3080403

4.      执行 configure 命令,生成 Makefile 文件:

fab@ubuntu:~$./configure --host=arm-linux-prefix=/opt/build

5.      生成 Makefile 文件后,执行 make 命令:

fab@ubuntu:~$ make

/bin/sh./libtool --tag=CC --mode=compile arm-linux-gcc -DPA

CKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\"-DPACKAGE_VERSIO

N=\"3.8.4.3\"-DPACKAGE_STRING=\"sqlite\3.8.4.3\" -DPACKAGE_BUGREPORT=\"http://www.sqlite.org\"-DPACKAGE_URL=\"\" -DPACKAGE=\"sqlite\"-DVERSION=\"3.8.4.3\"-D_FILE_OFFSET_BITS=64 -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1-DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1-DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1-DHAVE_DLFCN_H=1 -DHAVE_FDATASY

NC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1-DHAVE_GMTIME_R=1 -DHAVE_DECL_STRERROR_R=1-DHAVE_STRERROR_R=1-DHAVE_POSIX_FALLOCATE=1 -I.@am__isrc@ -D_REENTRANT=1 -DSQLITE_THREADSAFE=1-DSQLITE_ENABLE_FTS3 -DSQLITE_ENABLE_RTREE -g -O2 -MT sqlite3.lo -MD -MP -MF.deps/sqlite3.Tpo -c -o sqlite3.lo sqlite3.c

mkdir .libsarm-linux-gcc-DPACKAGE_NAME=\"sqlite\" -DPACKAGE_TARNAME=\"sqlite\"-DPACKAGE_VERSION=\"3.8.4.3\" "-DPACKAGE_STRING=\"sqlite 3.8.4.3\"

"-DPACKAGE_BUGREPORT=\"http://www.sqlite.org\"-DPACKAGE_URL=\"\"

-DPACKAGE=\"sqlite\"-DVERSION=\"3.8.4.3\" -D_FILE_OFFSET_BITS=64

-DSTDC_HEADERS=1-DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_S

TDLIB_H=1-DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1

-DHAVE_INTTYPES_H=1-DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLF

CN_H=1-DHAVE_FDATASYNC=1 -DHAVE_USLEEP=1 -DHAVE_LOCALTIME_R=1 -D

HAVE_GMTIME_R=1-DHAVE_DECL_STRERROR_R=1 -DHAVE_STRERROR_R=1-DHAVE_POSIX_FALLOCATE=1-I.@am__isrc@-D_REENTRANT=1-DSQLITE_THREADSAFE=1-DSQLITE_ENABLE_FTS3-DSQLITE_ENABLE_RTREE-g -O2 -MT sqlite3.lo -MD -MP -MF .deps/sqlite3.Tpo -c sqlite3.c -fPIC -DP

IC-o .libs/sqlite3.oarm-none-linux-gnueabi-gcc: 3.7.9": No such file ordirectory

<command-line>:warning: missing terminating " character

查找原因,与前文的 make 信息-DPACKAGE_STRING=\"sqlite\ 3.8.4.3\"

比较,发现是因为"-DPACKAGE_STRING=\"sqlite3.8.4.3\""字符之间空格没有转

义字符\

6.      修改 Makefile 文件:

fab@ubuntu:~$vim Makefile或gedit  Makefile

在136行找到-DPACKAGE_STRING=\"sqlite\  3.8.4.3\"改为-DPACKAGE_STRING=\"sqlite_3.8.4.3\",保存退出。重新执行 make 指令,建议在 make 之前先 make clean。

7.      等一段时间后,make 成功,执行命令:

fab@ubuntu:~$make install

8.      完成之后可以发现,之前所建目录/opt/build 下生成bin, include ,lib ,share 四个目录。主要用到的文件有./bin/sqlite3,./include/sqlite3.h以及./lib/下的库文件。bin 文件夹下的 sqlite3,是 sqlite 可执行应用程序,下载到板子 Linux系统下的/bin 目录或者/usr/bin 目录下,并添加文件可执行权限。在板子Linux 系统命令行下执行:

root@freescale / chmod  +x  sqlite3

进入 sqlite 命令行,可以实现对数据库的管理。

9. /opt/build 下文件介绍

./include/sqlite3.h定义了 sqlite 的 API 接口,会在有关 sqlite

的 c 文件交叉编译时用到。./lib/文件夹下是有关 sqlite 的静态链接库和动态链接库,lib/libsqlite3.alibsqlite3.la libsqlite3.so libsqlite3.so.0

libsqlite3.so.0.8.6pkgconfig libsqlite3.so和 libsqlite3.so.0 都是 libsqlite3.so.0.8.6的软链接文件。

9.      下载lib文件夹下的库到ARM板上

A:将lib目录下的libsqlite3.so、libsqlite3.so.0、 libsqlite3.so.0.8.6下载到开发板的 lib目录下,将sqlite3下载到 bin 目录下;

B:真正需要下载到板子目录/lib 下的动态库是libsqlite3.so.0.8.6。下载到板子后,还需对它建立软链接文件,因为可执行程序寻找的动态链接库的名字为 libsqlite3.so.0。

[root@FriendlyARMplg]# ln-s /lib/libsqlite3.so.0.8.6 /lib/libsqlite3.so

我所采用的是A方法,这样根据具体情况而定。

10.  到此,sqlite 的移植工作已经完成。

第四:测试数据库:

Voidtestdb(void)

{

                sqlite3 *db=NULL;

                char *zErrMsg = 0;

                int rc;

                //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件

                rc = sqlite3_open(test.db, &db);

                if( rc )

                {

                sqlite3_close(db);

                exit(1);

                }

                else {

                printf("You have opened a sqlite3database named test.db successfully!\n");

                }

                //创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中

         char *sql = " CREATE TABLE SensorData(IDINTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,TimeVARCHAR(12),SensorParameter REAL);" ;

                sqlite3_exec( db , sql , 0 , 0 , &zErrMsg);

                //插入数据

                sql = "INSERT INTO \"SensorData\"VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;

                sqlite3_exec( db , sql , 0 , 0 , &zErrMsg);

                sql = "INSERT INTO\"SensorData\" VALUES(NULL , 1 , 1 , '200605011306', 16.4 );" ;

                sqlite3_exec( db , sql , 0 , 0 , &zErrMsg);

                int nrow = 0, ncolumn = 0;

                char **azResult; //二维数组存放结果

                //查询数据

                sql = "SELECT * FROM SensorData ";

                sqlite3_get_table( db , sql , &azResult ,&nrow , &ncolumn , &zErrMsg );

                int i = 0 ;

                printf( "row:%d column=%d \n" , nrow, ncolumn );

                printf( "\nThe result of querying is :\n" );

                for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )

                printf( "azResult[%d] = %s\n", i ,azResult[i] );

                //释放掉 azResult 的内存空间

                sqlite3_free_table( azResult );

                //关闭数据库

                sqlite3_close(db);

}

将编译好的工程下载到开发板上,运行如下图所示:


 

0 0
原创粉丝点击