EasyARM283移植sqlite3
在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="sqlite3.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="sqlite3.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,&zErrMsg); //插入数据 sql = "INSERT INTO "SensorData"VALUES(NULL,1,'200605011206',18.9 );" ; sqlite3_exec( db,&zErrMsg); sql = "INSERT INTO"SensorData" VALUES(NULL,'200605011306',16.4 );" ; sqlite3_exec( db,&zErrMsg); int nrow = 0,ncolumn = 0; char **azResult; //二维数组存放结果 //查询数据 sql = "SELECT * FROM SensorData "; sqlite3_get_table( db,&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] = %sn",i,azResult[i] ); //释放掉 azResult 的内存空间 sqlite3_free_table( azResult ); //关闭数据库 sqlite3_close(db); } 将编译好的工程下载到开发板上,运行如下图所示:
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |