(注:摘自网上资料和书籍资料,自己亲自移植过,成功!)
环境:虚拟机+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/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
然后保存退出。
configure文件在sqlite-2.8.17/目录下。修改该文件主要是使其不检查交叉编译环境,之后执行configure命令,产生Makefile文件。
主要注释掉:(在vi的命令模式下,直接输入行数,然后回车即可,如“:19153按回车”)
19153行-19157行
19989行-19995行
20001行
20392行-20398行
20418-20424行
20430行
在/usr/src/目录下新建一个目录
#mkdir armsqlite
#cd armsqlite
#../sqlite-2.8.17/configure -disable-tcl -host=arm-linux
如果没有出现错误这回生成Makefile等文件,如果出现不能找到C编译器,则换一个高版本的交叉编译器。
进入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
原文链接:https://www.f2er.com/sqlite/202626.html