EasyARM283移植sqlite3

前端之家收集整理的这篇文章主要介绍了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=\"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,&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] = %s\n",i,azResult[i] );

//释放掉 azResult 的内存空间

sqlite3_free_table( azResult );

//关闭数据库

sqlite3_close(db);

}

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

原文链接:https://www.f2er.com/sqlite/200511.html

猜你在找的Sqlite相关文章