移植sqlite
一、参考文档
二、下载sqlite
1、sqlite官方首页:https://www.sqlite.org/index.html
2、How To Download Canonical SQLite Source Code 
3、历史版本:History Of SQLite Releases
1)步骤1:

2)步骤2:

3)步骤3:

4、Google Chrome下载文件或网页时崩溃的解决办法
三、交叉编译sqlite3.3.8
1、编译静态库和可执行文件
1.1 参考文档:
2)sqlite-3.3.6编译安装与交叉编译全过程详细记录
3)sqlite souce code目录下的README.md
1.2 编译过程
1.2.1 下载SQLite3.3.8.tar.gz(参照前面介绍办法)
1.2.2 确认配置好了交叉编译器的路径,可以通过echo $PATH查看
1.2.3 解压:
tar -xvf SQLite3.3.8.tar.gz
1.2.4 在解压目录下建立bld_3.3.8文件夹(即build目录),与sqlite sorce是同一级别目录
mkdir bld_3.3.8
1.2.5 在bld_3.3.8文件目录下运行配置命令
../SQLite3.3.8/configure --host=arm-linux --prefix=/home/cjb/share/usr --disable-tcl
--host=arm-linux意思是使用交叉编译器, --disable-tcl屏蔽tcl接口
也可以输入:../SQLite3.3.8/configure --help查看配置的帮助信息
其配置过程中出现错误提示:
configure: error: unable to find a compiler for building build tools
解决办法:结合configure.ac看了一下,原来是要设置config_TARGET_CC和config_BUILD_CC两个环境变量。config_TARGET_CC是交叉编译器,config_BUILD_CC是主机编译器
export config_BUILD_CC=gcc
export config_TARGET_CC=arm-linux-gcc
然后,重新输入配置命令,结果提示如下错误:
checking for /usr/include/readline.h... configure: error: cannot check for file existence when cross compiling
解决办法:readline我们已经编译过了,readline.h是肯定存在,没有必要检查。可在cache文件里设置ac_cv_header_readline_h=yes,骗过configure脚本:
echo ac_cv_header_readline_h=yes >arm-linux.cache
../SQLite3.3.8/configure --host=arm-linux --prefix=/home/cjb/share/usr --cache-file=arm-linux.cache --disable-tcl
1.2.5 这回配置成功了,会生成Makefile文件
1.2.6 运行make命令
make
会生成sqlite3可执行文件及.libs文件夹(包含libsqlite3.a、libsqlite3.so等等)
1.2.7运行make install命令
make install
会在前面定义的--prefix=/home/cjb/share/usr目录下生成三个文件夹:

1.2.8 使用arm-linux-strip命令修剪可执行文件和静态库,删除内部的调试信息,这样可以减少文件大小
arm-linux-strip -g sqlite3
arm-linux-strip -g libsqlite3.a
注意:在make命令之前,需要修改生成的Makefile文件,否则最后生成的可执行文件不能使用,修改如下:
sqlite3$(TEXE): $(TOP)/src/shell.c libsqlite3.la sqlite3.h
$(LTLINK) $(READLINE_FLAGS) $(LIBPTHREAD) \
-o $@ $(TOP)/src/shell.c libsqlite3.la \
$(LIBREADLINE) $(TLIBS)
改为:
sqlite3$(TEXE): $(TOP)/src/shell.c .libs/libsqlite3.a sqlite3.h
$(LTLINK) $(READLINE_FLAGS) $(LIBPTHREAD) \
-o $@ $(TOP)/src/shell.c .libs/libsqlite3.a \
$(LIBREADLINE) $(TLIBS)
即把libsqlite3.la替换成.libs/libsqlite3.a
因为运行时都是将SQlite放到Arm-linux的硬件板子上运行,所以一般将其编译成静态链接的形式。
四、交叉编译sqlite3.28.0
1.2.1 下载SQLite3.28.0.tar.gz(参照前面介绍办法)
1.2.2 确认配置好了交叉编译器的路径,可以通过echo $PATH查看

1.2.3 解压SQLite3.28.0.tar.gz
1.2.4 在解压目录下建立bld文件夹(即build目录),与sqlite sorce是同一级别目录
1.2.5 在bld文件目录下运行配置命令
../SQLite3.28.0/configure --host=arm-linux --prefix=/home/cjb/share/usr2 --disable-tcl
生成Makefile文件,其--host=arm-linux意思是使用交叉编译器, --disable-tcl屏蔽tcl接口
1.2.6 运行make命令
生成可执行文件sqlite3和.libs文件夹
1.2.7运行make install命令
会在前面定义的--prefix=/home/cjb/share/usr目录下生成三个文件夹:bin、include、lib
1.2.8 使用arm-linux-strip命令修剪可执行文件和静态库,删除内部的调试信息,这样可以减少文件大小
arm-linux-strip -g sqlite3
arm-linux-strip -g libsqlite3.a
arm-linux-strip工具后面所跟的参数含义不同:
-g 去除调试符号信息
-strip-all 移除所有的符号信息
注意:如果不加-g,会导致后面编译应用程序出错,找不到函数,截图如下:

五、libtool的使用
1、参考文件:
1)使用 GNU Libtool 创建库(IBM)
六、编译心得
1、如果用交叉编译器编译一直不成功,而用计算机自带的编译器则 编译成功,可以尝试换一个版本重新编译,节省时间
移植sqlite的更多相关文章
- 【ARM-Linux开发】嵌入式操作系统上的小型数据库移植SQLite
近段时间在学数据库,因为自身需求,所以注重研究了点嵌入式sqlite数据库,SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品 ...
- [国嵌攻略][182][Sqlite嵌入式数据库移植]
数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...
- Android数据库(sqlite)加密方案
最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密. 很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加 ...
- 将SQLite移植到ARM板上 (转)
SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它, 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够 ...
- sqlite移植
编译 # tar xvf sqlite-3.6.16.tar.gz # cd sqlite-3.6.16 # ./configure # ./configure --host=arm-linux -- ...
- 嵌入式设备sqlite库移植和使用
1]官网下载sqlite-autoconf-3300100.tar.gz,网址https://www.sqlite.org/download.html,2]解压:tar zxvf sqlite-aut ...
- S3C6410移植apache和php
需要准备的东西: Apache-1.3.39 for linux Php-4.4.8 for linux Ubuntu amd64位 PC机 6410开发板,我用的是友善之臂 交叉编译: 交叉编译呢, ...
- SQLite剖析之异步IO模式、共享缓存模式和解锁通知
1.异步I/O模式 通常,当SQLite写一个数据库文件时,会等待,直到写操作完成,然后控制返回到调用程序.相比于CPU操作,写文件系统是非常耗时的,这是一个性能瓶颈.异步I/O后端是SQLit ...
- SQLite XXTea加密学习
这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...
随机推荐
- c++数据结构排序
#include<stdio.h> #include<stdlib.h> #include<time.h> typedef int ElemType; typede ...
- Swift 访问权限
internal 内部的 1.默认情况下所有的类&属性&方法的访问权限都是internal 2.在本模块(项目/包/target)中可以访问 private 私有的 1.只有在本类中访 ...
- XML 之 语法详解
一.文档规则 .区分大小写. .属性值必须加引号(单引号.双引号都可以),一般情况下建议使用使用双引号. .所有标记必须有结束符号. .所有空标记必须关闭. .必须有且仅有一根元素. .解析空白字符时 ...
- 两表关联更新数据——oracle
from testb b where b.id=a.id) ; (where exists(select 1 from testb b where b.id=a.id):如果没有这个条件,不匹配的选项 ...
- spring源码 HierarchicalBeanFactory接口
HierarchicalBeanFactory 表示的是这些 Bean 是有继承关系的,也就是每个Bean 有可能有父 Bean. /* * Copyright 2002-2012 the origi ...
- python类、super函数
#PYTHON语言及其应用学习笔记 1.创建简单的类 class Person(): #python中特殊的对象初始化方法__init__,一个特殊的函数名 #当你在类声明里定义__init__()方 ...
- 电动车智能充电桩温度报警方案:SI24R2F
由于现在电动自行车便捷不少民众的出行都选择这种交通工具出行,随着越来越多人都使用电动自行车,智能电动车充电桩的需求也在慢慢的变多,电动车智能充电桩的安全性也慢慢成为市场的焦点,对此SI24R ...
- java课程之团队开发冲刺阶段2.1
一.总结昨天任务 1.由于使用的模拟器,自己没有安卓手机,所以在制作手机静音功能的时候有一些麻烦 2.功能没有完成 二.遇到的困难 1.安卓手机的静音功能分为五个部分的静音,需要每个都要静音 2.当在 ...
- Java TCP发送与接收
IP地址?端口号?主机名? 什么是Socket? 什么是UDP? 什么是TCP? UDP和TCP区别? 以上问题请自行百度,有标准解释,此处不再赘述,直接上干货! 实例: 发送端: public cl ...
- Standard Aras Dialogs
In a another blog post, we covered how to open dialogs within Aras Innovator using custom forms and ...