【嵌入式】——SQLite-2.8.17在FL2440上的移植(redhat9.0 linux)

(注:摘自网上资料和书籍资料,自己亲自移植过,成功!)

环境:虚拟机+Redhat 9.0 linux

软件:sqlite-2.8.17.tar.gz、cross-2.95.3.tar.gz

 

步骤:

一、安装交叉编译器

将cross-2.95.3.tar.gz复制到:/usr/src/目录下,用下面命令进行解压:

#tar -zxvf  cross-2.95.3.tar.gz

解压后在目录下出现一个名为“2.95.3”的目录;

然后配置交叉编译器的默认路径:

#export PATH=$PATH:/usr/src/2.95.3/bin

#source /etc/profile                     (让上已命令生效)

#arm-linux-gcc  --version             (输入该命令后,如果正确配置好交叉编译工具的路径,应该会显示出版本号)

 

二、

1、解压源码包

将sqlite-2.8.17.tar.gz复制到:/usr/src/目录下,解压

#tar -zxvf  sqlite-2.8.17.tar.gz

之后会生成sqlite-2.8.17目录

 

2、修改sqliteInt.h文件

 

在sqlite-2.8.17/src/目录里,有个sqliteInt.h的头文件,里面指定SQLITE_PTR_SZ的值为4,是btree(B树)有正确的变量大小,否则在ARM开发板上执行时会出现如下问题:

在文件btree.c中抛出断言“assert(sizeof(ptr) == sizeof(char *));”

应对该头文件进行修改,用vi或其他编辑器打开sqliteInt.h,在

#if SQLITE_PTR_SZ==4

#define INTPTR_TYPE int

#else

#define INTPTR_TYPE long long

#endif

的上面添加如下语句:

#define SQLITE_PTR_SZ 4

然后保存退出。

 

3、修改configure文件

configure文件在sqlite-2.8.17/目录下。修改该文件主要是使其不检查交叉编译环境,之后执行configure命令,产生Makefile文件。

主要注释掉:(在vi的命令模式下,直接输入行数,然后回车即可,如“:19153按回车”)

19153行-19157行

19989行-19995行

20001行

20392行-20398行

20418-20424行

20430行

 

4、生成Makefile文件

 

在/usr/src/目录下新建一个目录

#mkdir   armsqlite

#cd  armsqlite

#../sqlite-2.8.17/configure  -disable-tcl  -host=arm-linux

如果没有出现错误这回生成Makefile等文件,如果出现不能找到C编译器,则换一个高版本的交叉编译器。

 

5、修改Makefile文件

 

进入Makefile文件,找到:

BCC = arm-linux-gcc -g  -O2

改为:

BCC = gcc -g  -O2

因为其编译生成的可执行文件要在宿主机上运行。

 

由于编译生成的可执行文件sqlite要在ARM开发板上执行,因此将后面指定生成的库libssqlite.la改为libsqlite.a,即编译成静态链接的形式。

找到“all”,然后将后面的所有libsqlite.la 改为 libsqlite.a(注:libtclsqlite.la不要改)

修改后保存退出。

 

6、在armsqlite目录下执行如下命令:

#make clean

#make

然后就会在该目录下生成所需要的sqlite可执行程序等相关文件

通过挂载或者其他什么方法将该目录拷到开发板下的某个目录里

然后执行:

#./sqlite ex1

如果出现如下:

SQLite version 2.8.17

Enter “./help” for instructions

 sqlite>

则移植基本上成功了

然后测试下,

sqlite>create table tb11(one varchar(10),two smallint);(如果在输入该句会出后出现错误,则按CTRL+Z后重新执行,ex1改为ex1.db)

sqlite>  insert into tb11 values('hello!',10);

sqlite>  insert into tb11 values('goodbye',20);

sqlite>  select * from tb11;(回车后出现如下结构,则移植成功了)

hello! |10

goodbye  |20

你可能感兴趣的:(linux,redhat,sqlite,makefile,编译器)