`
peizhiinfo
  • 浏览: 1425059 次
文章分类
社区版块
存档分类
最新评论

sqlite嵌入式数据库在arm-linux下的编译全攻略

 
阅读更多

出处在这里

第一步 sqlite在arm-linux下的编译

1、 下载sqlite:请到http://www.sqlite.org/download.html,将下载的代码包解开,将生成sqlite目录,另外新建一个build目录,如sqlite-arm-linux,应该是和sqlite目录平行的同级目录。
2、 请先确定你的PATH中已经包含交叉编译工具arm-linux-gcc。可用“echo $PATH”命令查看。如我的是“/opt/toolchain/gcc 3.2/toolchain/bin/”
3、 为了在arm-linux下能正常运行sqlite,我们需要修改一处代码,否则在arm板上运行sqlite时会出现下面的东东:
===============================
在文件btree.c中抛出断言,
assert( sizeof(ptr)==sizeof(char*) );
===============================
此断言是为了保证btree(B树)有正确的变量大小,如“ptr”和“char*”。 在不同的体系结构的linux,如x86和arm,会有些差别。刚好让我们在arm-linux下遇到了:-)。那么我们可以做一定的修改。
请修改sqlite/src/sqliteInt.h,找到如下部分:
#ifndef INTPTR_TYPE
# if SQLITE_PTR_SZ==4
# define INTPTR_TYPE int
# else
# define INTPTR_TYPE long long
# endif
在上面的代码前加上一句:
#define SQLITE_PTR_SZ 4
这样后面的“typedef INTPTR_TYPE ptr;”就是定义的“int”类型,而不是“long long”。
4、 准备使用configure进行一些配置。请在sqlite目录下的configure中找到如下4处,并将他们注释掉,这样可以让configure不去检查你的交叉编译环境。在此提示一下:请你自己确定自己的“arm-linux-”系列命令在你的PATH环境变量中。如:你可以输入“arm-linux-”再按“TAB”键,看其是否自动完成命令行。
#if test "$cross_compiling" = "yes"; then
# { { echo "$as_me:12710: error: unable to find a compiler for building build tools" >&5
#echo "$as_me: error: unable to find a compiler for building build tools" >&2;}
# { (exit 1); exit 1; }; }
#fi
. . .
#else
# test "$cross_compiling" = yes &&
# { { echo "$as_me:13264: error: cannot check for file existence when cross compiling" >&5
#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
# { (exit 1); exit 1; }; }
. . .
#else
# test "$cross_compiling" = yes &&
# { { echo "$as_me:13464: error: cannot check for file existence when cross compiling" >&5
#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
# { (exit 1); exit 1; }; }
. . .
#else
# test "$cross_compiling" = yes &&
# { { echo "$as_me:13490: error: cannot check for file existence when cross compiling" >&5
#echo "$as_me: error: cannot check for file existence when cross compiling" >&2;}
# { (exit 1); exit 1; }; }
注释掉后,就可以执行configure了。在sqlite-arm-linux目录下,输入如下命令:
../sqlite/configure --host=arm-linux
这样在你的build目录中就将生成Makefile和一个libtool脚本,这些将在make时用到。
5、 修改Makefile文件
请修改Makefile文件,将下面的这行
BCC = arm-linux-gcc -g -O2
改掉,改成:
BCC = gcc -g -O2
一般地,我们都是将sqlite放到arm-linux的硬件板子上运行,所以我们一般将其编译成静态链接的形式。如果是共享so库的话,比较麻烦。
所以继续修改Makefile,找到如下地方:
sqlite:
将有其后的“libsqlite.la”改成
“.libs/libsqlite.a”
大功告成,现在可以make了。
应该不会出错,生成sqlite,libsqlite.a,libsqlite.so。你可以使用命令:find -name "sqlite";find -name "*.a";find -name "*.so"查
看文件所在的目录。
此时生成的sqlite文件是还未strip过的,你可以使用命令“file sqlite”查看文件信息。用strip处理过后,将去掉其中的调试信息,执行文
件大小也将小很多。命令如下:
arm-linux-strip sqlite
第二步 在arm板上运行sqlite
将sqlite拷贝到你的arm板上,方法很多,你需要根据自己的情况来选择。如ftp,cmdftp,wget等。
我的方法是使用wget将sqlite下载到arm板的/tmp目录,此目录是可写的。命令如下:
busybox wget ftp://192.168.0.100/sqlite
上面的命令,你可以看到我的板子上是已经有busybox来支持wget命令了的。:-)
好,开始运行
chmod +wx sqlite
./sqlite test.sqlite
会出现
sqlite>
提示符号,打个“.help”来看看命令先:-)
sqlite>.help
好了。现在sqlite已经在arm-linux下跑了起来。如何,感觉不错吧,在arm板子上玩玩“select * from”语句蛮爽吧:-)
友情提示:
如果sqlite在处理数据库过程中出现“The database disk image is malformed”,如:你在delete from sometable时,可能遇到这个问题。
那么就是你的arm板上的空间不够(如在/tmp下),请删除掉一些文件。我遇到的情况是空间还剩1-2M都会出现这个提示。删除后空余4M,就正
常了(如delete from sometable)。我是开的8M的ramdisk做开发玩的:-)
分享到:
评论

相关推荐

    数据库SQLite在嵌入式系统中的应用

    文中介绍在嵌入式系统开发中应用嵌入式数据库SQLite的具体方法, 包括介绍开源免费的嵌入式数据库SQLite, 给出SQLite在ARM2Linux平台上的交叉编译过程, 并通过一个应用实例分析说明SQLite在嵌入式系统中开发应用的...

    sqlite3嵌入式数据库加密

    这个是qt调用sqlite3加密的源码,亲测可用,我的编译环境是qt5.9.0。

    sqlite-autoconf-3070800-arm.tar.gz_arm sqlite_arm sqlite-autocon

    嵌入式sqlite for arm版,在LINUX下已经交叉编译完成。可以直接使用。

    sqlite-autoconf-3320300.tar.gz

    sqlite-autoconf-3320300 嵌入式数据库源码.编译命令:./configure --host=arm-linux(这里根据需要可以改为gcc,即省去该配置参数(删除--host),默认使用gcc) --prefix=/tmp/build

    sqlite3移植到嵌入式arm平台源码

    1.下载 下载网址 SQLite Download Page ..../configure --host=arm-poky-linux-gnueabi --prefix=/home/alientek/tools/sqlite3/install --host 选项用于指定交叉编译得到的库文件是运行在哪个平台,通常将--host 设

    Arm-linux入门手册.pdf

    包含初学ARM时的交叉编译环境的配置,数据库SQLite3的交叉编译与移植,Web服务器BOA的交叉编译与移植,嵌入式CGI编程和ARM串口编程。及其相关出现问题解决方法。程序代码纯属原创。

    Sqlite3移植到ARM Cortex-A9.docx

    文档是关于怎么把嵌入式数据库sqlite3移植到ARM Cortex-A9上面的方法,其他板子的移植方式跟这个差不多,里面除了移植方法,还有sqlite3的源码编译方法

    嵌入式linux下SQLite3的安装使用和sqlite3.4.2源码

    压缩包中包含sqlite3.4.2源码和安装说明。主要用于嵌入式linux,占用资源小,灵活使用。说明文档描述详细,如:介绍主机环境,如何使用交叉编译器编译,编译,剥离调试信息,下载到开发板。最后上板验证。

    基于嵌入式opencv人脸识别考勤系统-毕业设计

    二、开发工具:window版本QT5.12、arm版本QT库、opencv3视觉库、摄像头v4l2API、sqlite3数据库、RFID模块、arm-linux-gnueabi-5.4.0交叉编译工具。 三、项目功能描述:系统时刻显示当前时间并通过数据库存储公司员工...

    嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答]

    嵌入式系统开发基础——基于ARM微处理器和Linux操作系统[滕英岩][习题解答] 目录第1章 嵌入式系统基础知识 1.1 嵌入式系统的特点及分类 1.1.1 嵌入式系统的特点 1.1.2 嵌入式系统的分类 1.2 嵌入式系统的软硬件...

    sqlite 数据库源程序 3.6.5 版本

    sqlite 数据库源程序 3.6.5 版本 试用于linux 嵌入式ARM平台 以及编译后的库文件

    嵌入式Linux程序设计案例与实验教程-实例代码

    第7章 嵌入式Linux下的通信应用167 7.1 嵌入式Linux下的串口通信167 7.1.1 串口简介167 7.1.2 串口编程167 7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 ...

    基于ARM智能家居linux实现代码

    开发平台是ubuntu系统,在ARM平台上运行,需要arm-linux-gcc交叉编译环境,需要交叉编译sqlite3数据库、添加YUYVusb摄像头的驱动、使用TOP6410中的多媒体编程API中MFC进行视频的编码等;服务器模块分为:设备管理,...

    Qt下使用SQLite3

    编译环境:QT4.5+qt-creator2.4+arm-linux-gcc 4.3.3 程序是通过在QT槽函数中调用SQLite3的API来实现对数据库中的数据操作,这里我们默认嵌入式Linux中已经移植类SQLite3,程序中将调用SQLite3的库文件。

    嵌入式Linux程序设计案例与实验教程(配套光盘)第二部分

    第7章 嵌入式Linux下的通信应用167 7.1 嵌入式Linux下的串口通信167 7.1.1 串口简介167 7.1.2 串口编程167 7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信...

    LAMP(Linux+appweb7+php7+sqlite3 资源包)

    LASP,基于arm+appweb7.2+php7.3.5+sqlite3搭建...交叉编译链为 arm-linux-gnueabi 7.4.1 appweb-7.2.0 install libiconv-1.16 libxml2-2.9.9 openssl-1.0.1t php-7.3.5 README sqlite-autoconf-3280000 zlib-1.2.11

    嵌入式Linux程序设计案例与实验教程(配套光盘)第三部分

    第7章 嵌入式Linux下的通信应用167 7.1 嵌入式Linux下的串口通信167 7.1.1 串口简介167 7.1.2 串口编程167 7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信...

    嵌入式Linux程序设计案例与实验教程(配套光盘)第一部分

    第7章 嵌入式Linux下的通信应用167 7.1 嵌入式Linux下的串口通信167 7.1.1 串口简介167 7.1.2 串口编程167 7.1.3 串口编程应用实例168 实验7.1 串口通信实验170 7.2 嵌入式Linux网络编程171 7.2.1 网络通信...

    嵌入式\(高校应用案例)北航软件学院

    学员在中科院学习期间独立完成制作ARM开发板、开发触摸屏驱动等36个嵌入式专题实验项目,1-3个大型项目。其他实验项目如:智能机器人等可在结业后完成。 教学周期:10个月,其中第一学期3个月,第二学期5个月,课程...

    新版Android开发教程.rar

    ----------------------------------- Android 编程基础 1 封面----------------------------------- Android 编程基础 ...• SQLite SQLite SQLite SQLite 用作结构化的数据存储 • 多媒体支持 包括常见的音频、视频和...

Global site tag (gtag.js) - Google Analytics