sqlite关于SQLite3 编译和交叉编译的部分题目

from : http://blog.sina.com.cn/s/blog_5f2e119b0101ibwn.html

本文中网平台为ubuntu 12.04.1
LTS,开发板为s3c2440实验箱,使用的交叉编译器为3.4.6版本。
以ubuntu即便可以透过 sudo apt-get install sqlite3
来安装源之中的sqlite3,不过倒是不是最新版本,之所以不用源里面装之版不可是以十分版本有点老,而且暴发个大重点之题材,sqlite3只发当3.7.11过后的本才支撑insert
into table_name
values(),(),()这种模式来五遍性插入多漫长数,而源里面的本子是3.7.4底本子并无协助此特点,所以用起来就挺无便于,故选取了友好编译。本文为官网时的3.7.14.1本子啊例。
sqlite3官网提供了个别栽源代码的法门,一种植于作amalgamation,此外一种植于作autoconf,这有限种源码包有点不等同。amalgamation的源码包是把sqlite的所有源文件都拼到了sqlite3.c那多少个文件里去,而且这些包只适合单独编译出一个shell版本的sqlite3,它并无相会编译出Linux个中常见的开发库(也就是是依据sqlite3编写的软件要使靠之sqlite3库)。而autoconf版就够呛明确了,是接纳linux上边常见的./configure
make make
install形式来编译sqlite3的,可以编译出具有需要之看重库。虽然sqlite官方指出接纳amalgamation包,但透过个人测试,使用autoconf的保对于sqlite开发者来说是须的,对于ARM的交叉编译来说就是更是如此了。

 

重下就是做sqlite3应用开发的编译上的有点题目了。
每当pc上勾了代码之后编译的时候使用的挑项应该是这么的: gcc -o name name.c
-lsqlite3 最终好-lsqlite3凡援引sqlite3的开发库。
只要交叉编译的时就不怎么不平等了: arm-linux-gcc -o name name.c -I
/opt/sqlite3/include -L /opt/sqlite3/lib -lsqlite3
-I接的是穿插编译后安装的arm版的sqlite3目录中的腔文件,而-L则是包含的库文件。
诸如此类的编译选项编译之后,拷到开发板上去,执行,OK!

Amalgamation包编译shell版sqlite3:
解压了下载下来的amalgamation的压缩包之后,进入目录,执行
gcc -o sqlite3 shell.c sqlite3.c -lpthread -ldl
盖要10交20秒时即可编译出来一个可用之shell版sqlite3。之所以不推荐用amalgamation包,是以以是包始终不能够编译出援助上下键选拔历史命令记录之功效,虽然是设置了libreadline-dev包并且增长-lreadline编译参数为无得以,如有人会告我由,不老感激。

脚是陆续编译sqlite所有有关文书之题材。
鉴于是交叉编译,所以有的连锁的依赖库,比如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的库拷到干净文件系统里面去,不然交叉编译好的sqlite3会因为缺乏libreadline的库而拒绝执行。
以地点的办事还备好之后,进入以sqlite3-autoconf的目录内去,执行:
sudo ./configure –host=arm-linux –prefix=/opt/sqlite3
此configure的参数和方的编译readline和ncurses是同一的意,跟方在pc上configure之后输出的信一致,也要找到有-lncurses和-lreadline且readline为yes的下,才可以正常启用及下键调出命令记录之效应。
下一场实施 sudo make sudo make install
设置好之后,再将装目录中的有文件还拷到开发板的绝望文件系统里面去,用minicom连接到2440之linux,执行一下sqlite3这一个顺序,即使您是坚守上文来举办的话,应该不会师起问题,而且可支撑上下键展现历史命令记录是实用效用了。
除此以外还有一个较好玩的题材,假使未为交叉编译器加上ncurses和readline这半单仓库底支撑,直接用面的configure来生成makefile,make之后以会起发个错无法透过编译,只可以手动去改makefile,好像是Makefile有个位置多矣单斜杠,把生斜杠去丢后便足以编译通过了。不过拿交叉编译器打上ncurses和readline库之后,这些错误就是非会晤又冒出了。

Autoconf包编译sqlite3及其开发库:
在编译在此以前,还欲安装libreadline库,用以实现sqlite3按上下方向键实现重现历史命令记录的法力,此包不坏,500k左右。(当然,ubuntu下边做开发要要设置的build-essential,
libncurses5-dev, autoconf, automake那一个基本包就隐瞒了)
sudo apt-get install libreadline-dev
安好libreadline之后,执行如下命令编译并设置sqlite及开发库:
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了,多半编译完成之后的sqlite3不谋面帮助按上下键调出历史命令记录之实用效率。
执行完毕顿时三修命令下,sqlite3就曾让默认安装及了/usr/local/bin里面去了,然而还没有竣工也,假诺当顶峰直接执行一下sqlite3,多半会报错,类似于那般:
SQLite header and source version mismatch 2011-11-01 00:52:41
c7c6050ef060877ebe77b41d959e9df13f8c9b5e 2012-10-04 19:37:12
091570e46d04e84b67228e0bdbcd6e1fb60c6bdb
夫问题是盖ubuntu里面原来自带了一个老版的sqlite运行库,这多少个库由一个库文件以及一个标记链接组成,位于/usr/lib/i386-linux-gnu目录,分别是libsqlite3.so.0.8.6和一个符号链接到她的libsqlite3.so.0,由于地方举行的autoconf包的sqlite3并无是静态编译,所以便会起库不般配的状要先后拒绝执行的题目了。
由于无晓系统自带的慌老版的sqlite库还碰面无会晤来由此,大家固然留给在她: mv
/usr/lib/i386-linux-gnu/libsqlite3.so.0.8.6
/usr/lib/i386-linux-gnu/libsqlite3.so.0.8.6_bak
然后拿方编译好之autoconf包里面的斯库复制过去: cp
.libs/libsqlite3.so.0.8.6 /usr/lib/i386-linux-gnu
OK,现在推行一下sqlite3,完全无问题了(假使前没有安装libreadline和libncurses5-dev库,按上下方向键就从不显示历史命令记录之实用功效),同时该开发库也早已安装到系统里了。

SQLite3
(http://www.sqlite.org)是一个非常强大的小型开源[数据库](http://lib.csdn.net/base/mysql)软件,特别嵌入到一些软件中存储数据,当然,移植到[嵌入式](http://lib.csdn.net/base/embeddeddevelopment)系统上也是非常有必要的。众所周知的Symbian,[Android](http://lib.csdn.net/base/android),
iOS眼看几乎相当动平台如故行使的sqlite作多少存储,使用SQLite的厂商包括Adobe,
Airbus, Apple, Dropbox, Mozilla, GE, Google, McAfee, Microsoft,
PHP,
Python,
Toshiba等等。近日SQLite的赞助商包括Oracle,
Adobe, Mozilla等。官网的牵线以此地http://sqlite.org/about.html。
优点:
1、体积大迷你,shell版的可执行文件仅600K左右,所有运行库加起来呢只是3M多。
2、性能特别好,和MySQL相对而言性能完全不在这之下。
3、整个数据库存储于一个单纯的文本里,备份复苏都万分容易。
缺陷: 对于出现的支撑欠好,其对数据库的读写是全加锁之。

网站地图xml地图