一、参考文档

  1、SQLite安装、编译与应用

  2、gcc 生成 .a静态库和 .so动态库

二、下载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 参考文档:

      1)linux下的sqlite3的编译安装 for arm

      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的更多相关文章

  1. 【ARM-Linux开发】嵌入式操作系统上的小型数据库移植SQLite

    近段时间在学数据库,因为自身需求,所以注重研究了点嵌入式sqlite数据库,SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品 ...

  2. [国嵌攻略][182][Sqlite嵌入式数据库移植]

    数据库系统构成 在计算机系统中,保存数据的方式一般有两种: 1.普通文件方式 2.数据库方式 相比于普通文件方式,使用数据库来管理大批量数据具有更高的效率与安全性. 数据库系统一般由三个部分构成 1. ...

  3. Android数据库(sqlite)加密方案

    最近因为一些项目的安全性需要将数据库加密,一开始想到的就是先将数据库通过AES加密,然后运行时再解密,另一种是将数据库里的内容加密. 很快这两种方案都是不理想的,第一种加密方式形同虚设,第二种,如果加 ...

  4. 将SQLite移植到ARM板上 (转)

    SQLite,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它, 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够 ...

  5. sqlite移植

    编译 # tar xvf sqlite-3.6.16.tar.gz # cd sqlite-3.6.16 # ./configure # ./configure --host=arm-linux -- ...

  6. 嵌入式设备sqlite库移植和使用

    1]官网下载sqlite-autoconf-3300100.tar.gz,网址https://www.sqlite.org/download.html,2]解压:tar zxvf sqlite-aut ...

  7. S3C6410移植apache和php

    需要准备的东西: Apache-1.3.39 for linux Php-4.4.8 for linux Ubuntu amd64位 PC机 6410开发板,我用的是友善之臂 交叉编译: 交叉编译呢, ...

  8. SQLite剖析之异步IO模式、共享缓存模式和解锁通知

    1.异步I/O模式    通常,当SQLite写一个数据库文件时,会等待,直到写操作完成,然后控制返回到调用程序.相比于CPU操作,写文件系统是非常耗时的,这是一个性能瓶颈.异步I/O后端是SQLit ...

  9. SQLite XXTea加密学习

    这几天优化数据库读写,移植了xxtea加密到最新的数据库sqlite 3.12.2里,一些好文章放在这里.移植后,数据库读写性能异常优秀! 这几天又发现,数据库还是发生了无法写入情况,数据库崩溃掉了. ...

随机推荐

  1. CSS - 美化字体 => CSS的-font-smoothin属性优化

    body{     margin: 0;     font-family: Arial, Helvetica, sans-serif;     line-height: 1.2em;     back ...

  2. 破解centos7 密码

    1.在CentOS7的启动选项,按“e”选择编辑启动选项2.进入下图画面,点下箭头直到看到“linux162174542514”,按end键跳到行尾3.在行尾加上“rd.break”,并敲击键盘“ct ...

  3. Spring Boot2(007):关于Spring beans、依赖注入 和 @SpringBootApplication 注解

    一.关于Spring beans 和 依赖注入(Dependency Injection) spring boot 和 Spring 全家桶无缝衔接,开发过程中可以很轻松地使用 Spring 全家桶的 ...

  4. 洛谷[Luogu] 普及村总结

    总结 简单的模拟 交叉模拟 排序 排序EX

  5. Biu一Biu--GDB

    gcc常见编译选项 ** -c **:只激活预处理.编译和汇编,也就是生成obj文件 ** -S **:只激活处理和编译,把文件编译成汇编代码 ** -o **:定制目标名称,缺省的时候编译出来的可执 ...

  6. redis常用的命令行以及操作

    redis常用的命令行以及操作 转载酱紫人的理直气壮 最后发布于2018-07-30 17:00:41 阅读数 805  收藏 转载地址:https://blog.csdn.net/li_lening ...

  7. T_SQL 将一列多行数据合并为一行

    SQL Server在进行数据迁移和报表处理的时候会遇到将一列多行数据拼接为一个字符串的情况,为了处理这个问题,在网上找了一些相关的资料,提供两种方法,供遇到类似问题的朋友们参考,也借此加深自己的印象 ...

  8. Kicstart+pxe搭建自动化安装Linux 整理了一下

    一直想把 有道云得笔记整理一下传上来  都是自己亲测过 ,先来这篇吧  : 二小时安装 100台Linux  system  其实Winddows 也可以这样搞  只是方法    组件不同  原理一样 ...

  9. ES6中新增let命令使用方法

     在ES6中新增了let命令,该命令的用法与var 类似,但是所声明的变量只能在let命令所在的代码块(最接近let 命令的大括号内)中有效果.但是let 又有一些不同于var 的特性. 1.let定 ...

  10. archlinux下安装mysql

    mysql的安装 这里安装的是mariadb一个mysql的开源版本,实际使用体验没有差别 1. 安装Maria DB sudo pacman -S mariadb 2. 配置目录 sudo mari ...