sqlite3.3.6的移植

来源:互联网 发布:网络伤感催泪情歌 编辑:程序博客网 时间:2024/05/18 02:05

 

 

要移植sqlitearm-linux开发板,首先要安装交叉编译环境,要用2.95.3版的

 

arm-linux-gcc的安装

1
、将arm-linux-gcc的压缩包在/目录下解压缩

 

Tar  zxvf  arm-linux-gcc-2.95.3.tar.gz  

2
vi /etc/profile;在出现pathmunge 的语句段后添加pathmunge /usr/local/arm/2.95.3(版本号)/bin

3
、保存对profile的修改后,执行source /etc/profileOK


之后你就可以用arm-linux-gcc来编译你的程序了。

 

 

Sqlite的安装:

 

sqlite-3.3.6.tar.gz下载到/root目录下。然后,通过下列命令解压缩sqlite-3.3.6.tar.gz:

 

# tar zxvf sqlite-3.3.8.tar.gz

 

sqlite-3.3.6/目录下有一个Makefile范例文件Makefile.linux-gcc。首先通过下面的命令拷贝此文件并重命名为Makefile

 

# cp Makefile.linux-gcc Makefile

 

接下来,用vim打开Makefile文件并手动修改Makefile文件的内容。

 

Makefile的修改主要包括两个方面:首先是将编译器、归档工具等换成交叉工具链中的对应工具,其次是去掉与TCL相关的编译选项,因为默认情况下,将会编译SQLite3Tcl语言绑定,但是在移植到ARM-Linux的时候并不需要和Tcl语言绑定在一起,因此将两个与TCL有关的行注释掉。Makefile文件的修改情况如表1所示。

 

 

Makefile文件的修改情况

 

17行:TOP = ../sqlite        修改为       TOP = .

73行:TCC = gcc -O6       修改为       TCC = arm-linux-gcc -O6

81行:AR = ar cr           修改为       AR = arm-linux-ar cr

83行:RANLIB = ranlib     修改为       RANLIB = arm-linux-ranlib

86行:MKSHLIB = gcc –shared   修改为     MKSHLIB = arm-linux-gcc –shared

注释掉:TCL_FLAGS = -I/home/drh/tcltk/8.4linux

         LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl

 

 

接下来,还需要修改的一个的文件是main.mk,因为Makefile包含了这个文件。找到main.mk文件中的下面这一行:

 

 select.o table.o tclsqlite.o tokenize.o trigger.o /

 

把它替换成:

 

 select.o table.o tokenize.o trigger.o /

 

也就是把该行上的tclsqlite.o去掉。这样编译的时候将不会编译SQLite3Tcl语言绑定。自此,修改工作就完成了,接下来就可以开始编译SQLite3了,这通过make命令即可完成:

  

# make

 

编译完成之后,将在sqlite3.3.6/目录下生成库函数文件libsqlite3.a和头文件sqlite3.h。头文件sqlite3.h中声明了所有API接口函数原型,所有SQLite3应用程序都必须包含这个头文件。库函数文件libsqlite3.a(静态库)包含了所有API接口函数的实现,静态编译SQLite3应用程序时必须和这个库函数文件链接在一起。

 

测试程序:

#include <stdio.h>

#include <sqlite3.h>

 

 static int callback(void *NotUsed, int argc, char **argv, char **azColName)

 {

      int             i;

 

      for (i = 0; i < argc; i++) {

             printf("%s = %s/n", azColName[i], argv[i] ? argv[i] : "NULL");

      }

      printf("/n");

      return 0;

 }

 

 int main(int argc, char **argv)

 {

      sqlite3        *db;

      char           *zErrMsg = 0;

      int             rc;

 

      if (argc != 3) {

             fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT/n", argv[0]);

             exit(1);

      }

      rc = sqlite3_open(argv[1], &db);

      if (rc) {

             fprintf(stderr, "Can't open database: %s/n", sqlite3_errmsg(db));

             sqlite3_close(db);

             exit(1);

      }

      rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);

      if (rc != SQLITE_OK) {

             fprintf(stderr, "SQL error: %s/n", zErrMsg);

             sqlite3_free(zErrMsg);

      }

      sqlite3_close(db);

      return 0;

 }

 

 

移植:

1、程序的移植

将上面的源程序保存为test.c,然后,通过如下命令编译该程序:

# arm-linux-gcc -I /root/sqlite-3.3.6/ -L /root/sqlite-3.3.6 -o test test.c -lsqlite3  -static

 

-I 指明了头文件sqlite3.h所在目录  -L 指明了静态库libsqlite3.a所在目录  

–lsqlite3指明要链接静态库文件libsqlite3.a     -static指明是静态编译

 

Arm-linux-strip   test    去掉调示信息

 

接下来就可以将test下载到开发板上运行了

 

2sqlite3的移植

PC机的目录/usr/lib 中找到libsqlite3.so libsqlite3.so.0. libsqlite3.so.0.8.6三个库文件,去掉调示信息后把它们复制到开发板的/usr/lib目录下

 

Arm-linux-strip libsqlite3.so

Arm-linux-strip libsqlite3.so.0

Arm-linux-strip libsqlite3.so.0.8.6

 

Cp  –arf  libsqlite3.so  libsqlite3.so.0  libsqlite3.so.0.8.6  /usr/lib

 

注:因为libsqlite3.solibsqlite3.so.0是链接到libsqlite3.so.0.8.6的,所以拷贝是要加-arf

 

去掉/root/sqlite3.3.6目录下的sqlite3的调示信息后,将它下载到开发板的/usr/bin目录

 

Cp  sqlite3  /usr/bin

  

注:我是把U盘挂载到开发板上,进入到挂载目录下执行上面的拷贝操作的,所以要拷贝的文件前面都没加目录

 

这样就可以在开发板上直接运行sqlite3

 

原创粉丝点击