SQLite3.3.8在Hisi3515/3520上的移植
# tar zxvf sqlite-3.3.8.tar.gz
解压抽取完成之后将会在/root目录下生成一个sqlite-3.3.8/子目录,在该目录中包含了编译所需要的所有源文件和配置脚本。SQLite3的所有源代码文件都位于sqlite-3.3.8/src/目录下。
和在PC环境下编
译SQLite3不同,不能通过sqlite-3.3.8/目录下的configure脚本来生成Makefile文件。取而代之的是必须手动修改
Makefile文件。在sqlite-3.3.8/目录下有一个Makefile范例文件Makefile.linux-gcc。首先通过下面的命令拷
贝此文件并重命名为Makefile:
# cp Makefile.linux-gcc Makefile
接下来,用vim打开Makefile文件并手动修改Makefile文件的内容。首先找到Makefile文件中的下面这样一行:
TOP = ../sqlite
将其修改为:
TOP = .
找到下面这样一行:
TCC = gcc -O6
将其修改为:
TCC = arm-hismall-linux-gcc -O6
找到下面这样一行:
AR = ar cr
将其修改为:
AR = arm-hismall-linux-ar cr
找到下面这样一行:
RANLIB = ranlib
将其修改为:
RANLIB = arm-hismall-linux-ranlib
找到下面这样一行:
MKSHLIB = gcc -shared
将其修改为:
MKSHLIB = arm-hismall-linux-gcc -shared
注释掉下面这一行:
TCL_FLAGS = -I/home/drh/tcltk/8.4linux
注释掉下面这一行:
LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl
原则上,对
Makefile的修改主要包括两个方面:首先是将编译器、归档工具等换成交叉工具链中的对应工具,比如,gcc换成arm-hismall-linux-gcc,ar换
成arm-hismall-linux-ar,ranlib换成arm-hismall-linux-ranlib等等;其次是去掉与TCL相关的编译选项,因为默认情况下,将会编译
SQLite3的Tcl语言绑定,但是在移植到ARM-Linux的时候并不需要,因此将两个与TCL有关的行注释掉。对Makefile的修改总结如表
1所示。
表1 Makefile修改情况
位置
|
原值
|
修改为
|
17行
|
TOP = ../sqlite
|
TOP = .
|
73行
|
TCC = gcc -O6
|
TCC = arm-hismall-linux-gcc -O6
|
81行
|
AR = ar cr
|
AR = arm-hismall-linux-ar cr
|
83行
|
RANLIB = ranlib
|
RANLIB = arm-hismall-linux-ranlib
|
86行
|
MKSHLIB = gcc -shared
|
MKSHLIB = arm-hismall-linux-gcc -shared
|
96行
|
TCL_FLAGS = -I/home/drh/tcltk/8.4linux
|
#TCL_FLAGS = -I/home/drh/tcltk/8.4linux
|
103行
|
LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl
|
#LIBTCL = /home/drh/tcltk/8.4linux/libtcl8.4g.a -lm -ldl
|
接下来,还需要修改的一个的文件是main.mk,因为Makefile包含了这个文件。找到这个文件中的下面一行:
select.o table.o tclsqlite.o tokenize.o trigger.o /
把它替换成:
select.o table.o tokenize.o trigger.o /
也就是把该行上的tclsqlite.o去掉。这样编译的时候将不会编译SQLite3的Tcl语言绑定。
自此,修改工作就完成了,接下来就可以开始编译SQLite3了,这通过make命令即可完成:
# make
编译完成之后,将在sqlite3.3.8/目录下生成库函数文件libsqlite3.a和头文件sqlite3.h,这就是所需要的两个文件了。
将测试文件、libsqlite3.a和头文件sqlite3.h放到同一个文件夹下,静态编译
arm-hismall-linux-gcc -I ./ -L ./ -o test test_sqlite.c -lsqlite3
即可在hisi3515上运行,不要忘记在linux系统上安装sqlite sqlite3 libsqlite3-dev