切换导航
首页
技术问答
编程语言
前端开发
移动开发
开发工具
程序设计
行业应用
CMS系统
服务器
频道导航
▸ PHP
▸ Java
▸ Java SE
▸ Python
▸ C#
▸ C&C++
▸ Ruby
▸ VB
▸ asp.Net
▸ Go
▸ Perl
▸ netty
▸ Django
▸ Delphi
▸ Jsp
▸ .NET Core
▸ Spring
▸ Flask
▸ Springboot
▸ SpringMVC
▸ Lua
▸ Laravel
▸ Mybatis
▸ Asp
▸ Groovy
▸ ThinkPHP
▸ Yii
▸ swoole
▸ HTML
▸ HTML5
▸ JavaScript
▸ CSS
▸ jQuery
▸ Bootstrap
▸ Angularjs
▸ TypeScript
▸ Vue
▸ Dojo
▸ Json
▸ Electron
▸ Node.js
▸ extjs
▸ Express
▸ XML
▸ ES6
▸ Ajax
▸ Flash
▸ Unity
▸ React
▸ Flex
▸ Ant Design
▸ Web前端
▸ 微信小程序
▸ 微信公众号
▸ iOS
▸ Android
▸ Swift
▸ Hybrid
▸ Cocos2d-x
▸ Flutter
▸ Xcode
▸ Silverlight
▸ cocoa
▸ Cordova
前端之家
Sqlite
交叉编译SQLite
交叉编译SQLite
2020-07-03
Sqlite
前端之家
前端之家
收集整理的这篇文章主要介绍了
交叉编译SQLite
,
前端之家
小编觉得挺不错的,现在分享给大家,也给大家做个参考。
sql
ite3 (http://www.
sql
ite.org)是一个非常强大的小型开源
数据库
软件,特别嵌入到一些软件中存储数据,当然,移植到嵌入式系统上也是非常有必要的。众所周知的Symbian,Android,IOS这几大移动平台都是使用的
sql
ite作数据存储,使用
sql
ite的厂商
包括
Adobe,Airbus,Apple,Drop
Box
,Mozilla,GE,Google,McAfee,Microsoft,
PHP
,Python,Toshiba等等。目前
sql
ite的赞助商
包括
Oracle,Adobe,Mozilla等。官网的介绍在这里http://
sql
ite.org/about.html。 优点: 1、体积非常小巧,shell版的可执行
文件
仅600K左右,所有运行库加起来也不过3M多。 2、
性能
很好,和
MysqL
相比
性能
完全不在其之下。 3、整个
数据库
存储在一个单一的
文件
里,备份恢复都非常容易。 缺点: 对于并发的
支持
不好,其对于
数据库
的读写是完全加锁的。 本文中系统平台为ubuntu 12.04.1 LTS,开发板为s3c2440实验箱,使用的交叉编译器为3.4.6版。 在ubuntu虽然可以通过 sudo apt-get install
sql
ite3 来安装源里面的
sql
ite3,不过却不是最新版,之所以不用源里面安装的版本不仅仅是因为那个版本有点老,而且有个很关键的问题,
sql
ite3只有在3.7.11之后的版本才
支持
insert into table_name values(),(),()这种方式来一次性插入多条数据,而源里面的版本是3.7.4的版本并
不支持
这个特性,所以用起来就很不方便,故选择了自己编译。本文以官网最新的3.7.14.1版为例。
sql
ite3官网提供了两种源
代码
的方式,一种叫作amalgamation,另外一种叫作autoconf,这两种源码包有点不一样。amalgamation的源码包是把
sql
ite的所有源
文件
都集成到了
sql
ite3.c这一个
文件
里面去,而且这个包只适合单独编译出一个shell版本的
sql
ite3,它并不会编译出linux里面常见的开发库(也就是基于
sql
ite3编写的软件必须要依赖的
sql
ite3库)。而autoconf版就很明显了,是使用linux上面常见的./configure make make install方式来编译
sql
ite3的,可以编译出所有需要的依赖库。虽然
sql
ite官方建议使用amalgamation包,但经过个人测试,使用autoconf的包对于
sql
ite开发者来说是必须的,对于ARM的交叉编译来说就更是如此了。 Amalgamation包编译shell版
sql
ite3: 解压了下载下来的amalgamation的压缩包之后,进入目录,执行 gcc -o
sql
ite3 shell.c
sql
ite3.c -lpthread -ldl 大约要10到20秒时间即可编译出来一个可用的shell版
sql
ite3。之所以不推荐使用amalgamation包,是因为使用这个包始终无法编译出
支持
上下键选择历史命令记录的
功能
,即使是安装了libreadline-dev包并且
加上
-lreadline编译参数也不可以,如有人能告诉我原因,不甚感激。 Autoconf包编译
sql
ite3及其开发库: 在编译之前,还需要安装libreadline库,用以实现
sql
ite3按上下方向键实现重现历史命令记录的
功能
,此包不大,500k左右。(当然,ubuntu下面做开发必须要安装的build-essential,libncurses5-dev,autoconf,automake这些基本包就不说了) sudo apt-get install libreadline-dev 安装好libreadline之后,执行如下命令编译并安装
sql
ite及开发库: sudo ./configure sudo make sudo make install 在执行完./configure之后,注意观察一下
输出
的结果,在靠后的部分,可以看到这样的
输出
: checking for library containing tgetent... -lncurses checking for library containing readline... -lreadline checking for readline... yes 如果没找到lncurses和lreadline这两个库,readline肯定就是no了,多半编译完成之后的
sql
ite3不会
支持
按上下键调出历史命令记录这个实用
功能
。 执行完这三条命令之后,
sql
ite3就已经被默认安装到了/usr/local/bin里面去了,但是还没完呢,如果在终端直接执行一下
sql
ite3,多半会报错,类似于这样:
sql
ite header and source version mismatch 2011-11-01 00:52:41 c7c6050ef060877ebe77b41d959e9df13f8c9b5e 2012-10-04 19:37:12 091570e46d04e84b67228e0bdbcd6e1fb60c6bdb 这个问题是因为ubuntu里面原来
自带
了一个老版的
sql
ite运行库,这个库由一个库
文件
和一个符号
链接
组成,位于/usr/lib/i386-linux-gnu目录,分别是lib
sql
ite3.so.0.8.6和一个符号
链接
到它的lib
sql
ite3.so.0,由于上面进行的autoconf包的
sql
ite3并不是静态编译,所以就会出现库不匹配的情况而程序拒绝执行的问题了。 由于不知道系统
自带
的那个老版的
sql
ite库还会不会有用,我们就留着它: mv /usr/lib/i386-linux-gnu/lib
sql
ite3.so.0.8.6 /usr/lib/i386-linux-gnu/lib
sql
ite3.so.0.8.6_bak 然后把刚才编译好的autoconf包里面的这个库复制过去: cp .libs/lib
sql
ite3.so.0.8.6 /usr/lib/i386-linux-gnu OK,现在执行一下
sql
ite3,完全没有问题了(如果前面没有安装libreadline和libncurses5-dev库,按上下方向键就没有
显示
历史命令记录这个实用
功能
),同时其开发库也已经安装到系统里了。 下面是交叉编译
sql
ite所有相关
文件
的问题。 由于是交叉编译,所以一些相关的依赖库,比如libreadline和libncurses就不能直接安装到系统里面了(安装了也没用不会被交叉编译器识别),而是应该安装到交叉编译器的目录中。 先分别去下面这两个地方下载libreadline和ncurses的源码包(之所以要安装ncurses库是因为libreadline依赖于它,而且很多linux的软件都会用到这个库),注意是下载.tar.gz为扩展名的包,一般都是下载最新版的。 http://ftp.gnu.org/gnu/readline/ http://ftp.gnu.org/gnu/ncurses/ 分别交叉编译这两个包: sudo ./configure --host=arm-linux --prefix=/opt/ sudo make sudo make install --host接的是arm的交叉编译器的
名称
,--prefix接的是编译好之后安装到的路径,这里建议不要直接安装到交叉编译器的路径,而是安装到其它地方,等安装完之后到目标目录确认一下之后再手动拷到交叉编译器的目录里面去。 待两个包编译安装完之后,还要手动拷到交叉编译器的路径里面去,这里我以安装在/usr/local/arm/3.4.6目录里面的3.4.6版本的交叉编译器为例。进入到刚才编译安装好的那两个包的目录,里面应该有bin include share lib等目录,在那个目录里面,执行如下命令 sudo cp -pR * /usr/local/arm/3.4.6/arm-linux 这里有两个个人认为需要注意的问题。 1. cp -p的参数是复制
文件
的
属性
、拥有者、符号
链接
等所有
属性
,而-R是递归复制,也就是拷贝下面的所有目录和
文件
过去。而目标目录并不是/usr/local/arm/3.4.6,而是其下面的arm-linux这个目录,需要注意一下。当然3.4.6版本的交叉编译器是这样子的,别的版本的交叉编译器请自行参考。 2. 这两个库不仅要安装到交叉编译器里面去,更是建议把它安装到开发板的根
文件
系统里面去,因为个人的2440的根
文件
系统是用nfs挂在pc上的,所以只要用cp -pR把所有东西直接拷过去就行了,其它
方法
做的根
文件
系统请自行想办法
解决
。至少需要把libreadline的库拷到根
文件
系统里面去,不然交叉编译好的
sql
ite3会因为缺少libreadline的库而拒绝执行。 在上面的工作都准备好之后,进入以
sql
ite3-autoconf的目录里面去,执行: sudo ./configure --host=arm-linux --prefix=/opt/
sql
ite3 这个configure的参数跟上面的编译readline和ncurses是一样的意思,跟上面在pc上configure之后
输出
的信息一样,也要找到有-lncurses和-lreadline且readline为yes的时候,才能正常启用上下键调出命令记录的
功能
。 然
后执行
sudo make sudo make install 安装完成之后,再把安装目录里面的所有
文件
都拷到开发板的根
文件
系统里面去,用minicom连接到2440的linux,执行一下
sql
ite3这个程序,如果你是按上文来做的话,应该不会有问题,而且可以
支持
上下键
显示
历史命令记录这个实用
功能
了。 另外还有一个比较有意思的问题,如果不给交叉编译器
加上
ncurses和readline这两个库的
支持
,直接用上面的configure来
生成
makefile,make之后将会有有个
错误
无法通过编译,只能手动去改makefile,好像是Makefile有个地方多了个斜杠,把那个斜杠去掉之后就可以编译通过了。但是把交叉编译器打上ncurses和readline库之后,这个
错误
就不会再出现了。 再下面就是做
sql
ite3应用开发的编译上的小问题了。 在pc上写完
代码
之后编译的时候使用的选项应该是这样的: gcc -o name name.c -l
sql
ite3 最后那个-l
sql
ite3是引用
sql
ite3的开发库。 而交叉编译的时候就有些不一样了: arm-linux-gcc -o name name.c -I /opt/
sql
ite3/include -L /opt/
sql
ite3/lib -l
sql
ite3 -I接的是交叉编译后安装的arm版的
sql
ite3目录里面的头
文件
,而-L则是包含的库
文件
。 这样的编译选项编译之后,拷到开发板上去,执行,OK!
上一篇:sqlite 的基本操作以及数据库查询语
下一篇:【Android数据存储】SQLite使用实例
猜你在找的Sqlite相关文章
SQLite学习笔记
安装 在Windows上安装SQLite。 访问官网下载下Precompliled Binaries for Windows的两个压...
作者:前端之家 时间:2021-01-12
windows上如何安装Sqlite
一、安装 下载地址:http://www.sqlite.org/download.html 将Precompiled Binaries for Wi...
作者:前端之家 时间:2020-11-05
【Android数据存储】SQLite使用实例(附源码)
实例: 会员信息管理 功能:1.查看数据库 2.清空数据库 3.增加会员 4.删除会员 5.更新会员 ...
作者:前端之家 时间:2020-08-07
SQLite数据库管理
作者:前端之家 时间:2020-08-07
SQLite3常用命令
作者:前端之家 时间:2020-08-07
加密你的SQLite
关于SQLite SQLite是一个轻量的、跨平台的、开源的数据库引擎,它的在读写效率、消耗总量、...
作者:前端之家 时间:2020-08-07
SQLite这么娇小可爱,不多了解点都不行啊
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了...
作者:前端之家 时间:2020-08-07
SQLite这么娇小可爱,不多了解点都不行啊
在我眼里,MySQL和Oracle是这样的 而SQLite在是这样的 所以这么萌的数据库,我真的应该多了...
作者:前端之家 时间:2020-08-07
SQLite 这么娇小可爱,不多了解点都不行啊
(点击上方蓝字,快速关注我们) 作者:空之境界 网址:http://supermao.cn/sqlitezhe-yao-...
作者:前端之家 时间:2020-08-07
SQLITE3 使用总结
SQLITE3 使用总结 投稿:hebedich 字体:[ 增加 减小] 类型:转载 时间:2014-08-19 Sql...
作者:前端之家 时间:2020-08-07
编程分类
MySQL
MsSQL
Oracle
Sqlite
Postgre SQL
Mariadb
MongoDB
NoSQL
HBase
JDBC
最新文章
• SQLite学习笔记
• windows上如何安装Sqlite
• 【Android数据存储】SQLit
• SQLite数据库管理
• SQLite3常用命令
• 加密你的SQLite
• 加密你的SQLite
• SQLite这么娇小可爱,不多
• SQLite这么娇小可爱,不多
• SQLite 这么娇小可爱,不多
热门标签
更多 ►
undo日志
persistent-c
mysql-error-
postal-code
sql-match-al
mysql-5.6
mysql-8.0
database-tri
安装路径
系统错误
data_dir
丢失文件
主从同步
sql_mode
数据库目录
匿名用户
character_se
ID归零
数据库位置
查询表
重复字段
查询字段
截断日志
SUSPECT
7391
Remote Serve
Linked Serve
玄学问题
登录不上
开启远程访问