|
第一步: - 使用交叉编译工具是:arm-elf-gcc/arm-elf-ar/arm-elf-ranlib
- 分别用于编译ojbect文件和将object文件打成uClinux需要的静态libsqlite3.a包,arm-elf-ranlib什么作用还不清楚。
复制代码
第二步:-
- 交叉编译sqlite3提供两种版本的Makefile, 一种是通过configure由系统自
- 动配置环境。选项-disable-tcl, -build=arm-linux等;另一种是由自己手动
- 配置,将样板Makefile.linux-gcc拷贝Makefile,然后做一些适合自己环
- 境的编辑。由系统自动配置的Makefile同时生成了动态库*.so和静态库*.a
- 而且分别为这两种包编译sqlite3可执行文件【分别位于.lib目录下和当前目录】
复制代码 第三步:- 修改第二种做法的Makefile:
- BCC用于编译lemon,只有先编译成功lemon后,才能编译后面的src/*.c。由于lemon是需要在host机中运行,所以BCC我们不能改成交叉编译只能用gcc编译。TCC是用于交叉编译的编译选项,所以改动TCC选项:
- TCC = arm-elf-gcc -O6 -Wl,-elf2flt //-elf2flt用于uClinux的BFLT格式
- AR = arm-elf-ar cr
- RANLIB = arm-elf-ranlib
- 因为在uClinux不支持动态库【需要动态分配程序的地址空间】和动态加载动态库【使用dlopen/dlsys/dlclose】,所以注释:
- #MKSHLIB = gcc -shared
- #SO = so
- #SHPREFIX = lib
- 以及加上一个宏定义【此宏定义用于sqlite的增强功能即动态的加载动态库,uClinux上不需要,所以需要定义该宏】
- OPTS = -DNDEBUG=1
- OPTS += -DHAVE_FDATASYNC=1
- OPTS += -DSQLITE_OMIT_LOAD_EXTENSION=1
- Gcc中条件编译只需加上-D后面跟宏定义即可。
复制代码 第四步: - 我们不需要TCL版本的sqlite所以去掉此功能,编辑main.mk
- 去掉LIBOBJ+=中的tclsqlite3.o
复制代码 第五步:-
- 上面成功后,用arm-elf-gdb【可以仿真ARM7和9系列】启动基于ARMoulator
- 的仿真环境
复制代码 运行:- Welcome to
- ____ _ _
- / __| ||_|
- _ _| | | | _ ____ _ _ _ _
- | | | | | | || | _ \| | | |\ \/ /
- | |_| | |__| || | | | | |_| |/ \
- | ___\____|_||_|_| |_|\____|\_/\_/
- | |
- |_|
- GDB/ARMulator support by <davidm@snapgear.com>
- For further information check:
- http://www.uclinux.org/
- Execution Finished, Exiting
- Sash command shell (version 1.1.1)
- sqlite> create table Lineup (int channelid, char lineupname);
- sqlite> insert into Lineup values (13, 'cctv-1');
- sqlite> insert into Lineup values (14, 'cctv-2');
- sqlite> select * from Lineup;
- 13|cctv-1
- 14|cctv-2
- sqlite>
复制代码 |
|