加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

EasyARM283移植sqlite3

发布时间:2020-12-12 20:01:44 所属栏目:百科 来源:网络整理
导读:在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 第三:移植步骤

在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);

}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读