sqlite3交叉编译环境配置

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文件件下是库文件:
sqlite3交叉编译环境配置_第1张图片

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应用程序了。

你可能感兴趣的:(嵌入式linux)