SQLite是一个进程内的库,实现了自给自足的、无服务器的、零配置的、事务性的 SQL 数据库引擎。它是一个零配置的数据库,这意味着与其他数据库一样,您不需要在系统中配置。
就像其他数据库,SQLite 引擎不是一个独立的进程,可以按应用程序需求进行静态或动态连接。SQLite 直接访问其存储文件。一个完整的 SQLite 数据库是存储在一个单一的跨平台的磁盘文件,存储在本地,无需连接服务器,在嵌入式系统中应用非常广泛。
在嵌入式linux中使用sqlite3版本数据库,需要配置交叉编译环境,具体要做以下几项工作。
1、安装sqlite3
目前,几乎所有版本的 Linux 操作系统都附带 SQLite。所以,只要使用下面的命令来检查您的机器上是否已经安装了 SQLite。
root@ubuntu:/home/jwx/work/033N1# sqlite3
SQLite version 3.19.3 2017-06-08 14:26:16
Enter ".help" for usage hints.
Connected to a transient in-memory database.
Use ".open FILENAME" to reopen on a persistent database.
sqlite>
如果没有看到上面的结果,那么就意味着没有在 Linux 机器上安装 SQLite。因此,让我们按照下面的步骤安装 SQLite:
请访问 SQLite 下载页面,从源代码区下载 sqlite-autoconf-*.tar.gz。
步骤如下:
$tar xvfz qlite-autoconf-3190300.tar.gz
$cd sqlite-autoconf-3190300
$./configure --prefix=/usr/local
$make
$make install
这样在/usr/local/bin文件夹下,可以看到 sqlite3 ,需要注意的是 这里仅仅是安装了在PC上运行的sqlite3,需要编译安装可以运行在嵌入式linux的sqlite3版本。
2、编译安装嵌入式的sqlite3
想成功编译可在嵌入式linux下运行的sqlite应用程序,需要配置好sqlite3嵌入式交叉编译环境。
(1)进入sqlite-autoconf-3190300文件夹,执行
./configure --host=arm-linux --prefix=/opt/sqlite3
(2)编译嵌入式sqlite3
由于前面编译过PC版,需要先执行 make clean,否则执行make ,会出现
make: Nothing to be done for `all’.的情况。
执行下面几条命令:
root@ubuntu:/home/sqlite-autoconf-3190300# make clean
root@ubuntu:/home/sqlite-autoconf-3190300# make
root@ubuntu:/home/sqlite-autoconf-3190300# make install
执行成功,在/opt/sqlite3文件夹下有bin include lib share四个文件夹,bin下有可执行文件sqlite3,include包含头文件msvc.h sqlite3.h sqlite3ext.h, lib文件件下是库文件:
libsqlite3.a是静态库,libsqlite3.so.0.8.6是动态库,libsqlite3.so 和 libsqlite3.so.0是libsqlite3.so.0.8.6的链接文件。
(3)编写测试文件sqlitetest.c
#include
#include "sqlite3.h"
int main(int argc, char* argv[])
{
sqlite3 *db;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("test.db", &db);
if( rc ){
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
}else{
fprintf(stderr, "Opened database successfully\n");
}
sqlite3_close(db);
}
i pc程序编译
root@ubuntu:/home/jwx/work/033N1# gcc sqlitetest.c -lsqlite3
root@ubuntu:/home/jwx/work/033N1# ls
a.out sqlitetest.c sqlitetest.c~
执行 ./a.out,创建数据库文件test.db
root@ubuntu:/home/jwx/work/033N1# ./a.out
Opened database successfully
ii 嵌入式程序编译
arm-linux-gcc sqlitetest.c -o sqltest -I/opt/sqlite3/include -L/opt/sqlite3/lib -lsqlite3
root@ubuntu:/home/jwx/work/033N1# ls -l
total 32
-rwxr-xr-x 1 root root 7377 Sep 4 20:37 a.out
-rw-r--r-- 1 root root 353 Sep 4 20:47 sqlitetest.c
-rw-r--r-- 1 root root 361 Sep 4 20:36 sqlitetest.c~
-rwxr-xr-x 1 root root 6068 Sep 5 20:19 sqltest
-rw-r--r-- 1 root root 0 Sep 4 20:37 test.db
root@ubuntu:/home/jwx/work/033N1# ./sqltest
bash: ./sqltest: cannot execute binary file
sqltest是嵌入式二进制文件,在PC环境下无法执行。
**注:如果前面的嵌入式环境的sqlite3没有安装成功,编译应用程序
arm-linux-gcc sqlitetest.c -o sqltest -I/opt/sqlite3/include -L/opt/sqlite3/lib -lsqlite3
会提示找不到 lsqlite3。**
3、把bin/sqlite3拷贝到ARM板上的根目录/bin下,还有把/lib下的libsqlite3.so.0.8.6 libsqlite3.so libsqlite3.so.0拷贝到ARM板根目录/lib目录下,就可以在ARM板上运行sqlite应用程序了。