|
SQLite编译安装步骤
|
|
来源:工友
作者:工友
时间:2007-12-20 |
|
-
为了编译应用程序,首先要把sqlite源码包编译安装到系统。
-
-
-
-
/usr/local/include/sqlite.h
-
/usr/local/lib/libsqlite.a
/usr/local/lib/libsqlite.la /usr/local/lib/libsqlite.so /usr/local/lib/libsqlite.so.0 /usr/local/lib/libsqlite.so.0.8.6
-
bld/doc目录下的超文本文件。
-
/usr/bin/sqlite
-
在Fedora 3.0环境下进行。
-
-
下载sqlite:你可以到http://www.sqlite.org/download.html,下载sqlite-2.8.16.tar.gz软件包;
-
将下载的软件包解压缩到uClinux-dist/user目录下;
命令:
$tar zxvf sqlite-2.8.16.tar.gz -C uClinux-dist/user/
现在在uclinux的user目录下,你应该可以看到sqlite目录了。解压缩到这个user目录主要是要将sqlite编译成一个普通的用户应用程序。
-
在同级目录下建立一个子目录:
mkdir bld cd bld ../sqlite/configure
-
好,现在我们就要对sqlite进行修改,来做移植工作。
在下面的描述中,我们将对以下几个文件进行一定的添加、修改,从而来完成sqlite在uclinux下的编译:
bld/main.mk 修改 bld/Makefile 添加 sqlite/src/os.c 修改 sqlite/src/shell.c 修改
对这几个文件进行修改时,请自己做好这些文件的备份,比如你可以将它们拷贝一份,改名成文件名后面带.bak。这个很重要,可以避免你在修改的过程出现问题而无法还原。
-
一、修改sqlite/main.mk
1、TCCX
将
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src
修改为
TCCX = $(TCC) $(OPTS) $(THREADSAFE) $(USLEEP) -I. -I$(TOP)/src $(CFLAGS)
即加上$(CFLAGS)标记。
2、 LIBOBJ
找到 # Object files for the SQLite library.
将其中的tclsqlite.o去掉。即去掉tcl有关的东西。
如果没有tclsqlite.o,那么不用处理它。
3、 sqlite$(EXE)
找到类似sqlite$(EXE)的一句,将:
sqlite$(EXE): $(TOP)/src/shell.c libsqlite.a sqlite.h $(TCCX) $(READLINE_FLAGS) -o sqlite$(EXE) $(TOP)/src/shell.c \ libsqlite.a $(LIBREADLINE) $(THREADLIB)
替换为:
shell.o: $(TOP)/src/shell.c sqlite.h $(TCCX) $(READLINE_FLAGS) -c $(TOP)/src/shell.c
sqlite$(EXE): shell.o libsqlite.a $(TCC) $(LDFLAGS) -o $@ shell.o \ libsqlite.a $(LIBREADLINE) $(THREADLIB) $(LDLIBS)
即在sqlite$(EXE)上一行加上shell.o,及在其后加上$(LDLIBS)标记。这个是对/src/shell.c的编译方法的修改。
4、romfs
将:
install: sqlite libsqlite.a sqlite.h mv sqlite /usr/bin mv libsqlite.a /usr/lib mv sqlite.h /usr/include
替换为:
romfs: sqlite $(ROMFSINST) /bin/sqlite
即去掉make install项,加上make romfs项。 这个很重要,这将在romfs的/bin目录下生成sqlite。
5、clean
将:
clean: rm -f *.o sqlite libsqlite.a sqlite.h opcodes.* rm -f lemon lempar.c parse.* sqlite*.tar.gz rm -f $(PUBLISH) rm -f *.da *.bb *.bbg gmon.out rm -rf tsrc
替换为:
clean: rm -f *.o sqlite libsqlite.a sqlite.h opcodes.* sqlite.gdb rm -f $(PUBLISH) rm -f *.da *.bb *.bbg gmon.out rm -rf tsrc
distclean: clean rm -f lemon lempar.c parse.* sqlite*.tar.gz rm -f config.h
即增加make distclean项。
-
删除包含TCLSQLITE的部分。
-
修改sqlite/src/os.c
如果你的sqlite包中包括os.c文件那么就对其进行修改,没有os.c文件可能是你的sqlite版本比较新,那么无须修改。
将所有你找到的:
if( s!=0 )
用:
if( s!=0 && errno != ENOSYS )
替换。
-
修改sqlite/src/shell.c
1、struct previous_mode_data 结构定义项:
将 int colWidth[100];
用 int colWidth[20];
替换。
2、struct callback_data 结构定义项
将:
int colWidth[100]; int actualWidth[100]; char outfile[FILENAME_MAX];
用:
int colWidth[20]; int actualWidth[20]; char *outfilep;
对应替换。
再在结构下面增加:
#ifndef FILENAME_MAX #define FILENAME_MAX 4095 #endif char outfilename[FILENAME_MAX]; /* Filename for *out */
即
struct callback_data { ... }; #ifndef FILENAME_MAX #define FILENAME_MAX 4095 #endif char outfilename[FILENAME_MAX]; /* Filename for *out */
3、函数do_meta_command(...)
找到类似这样的一句:
sqlite_exec(p->db, "PRAGMA database_list; ", callback, &data, &zErrMsg);
在它的前面有一句
memcpy(&data, p, sizeof(data));
现在在memcpy下面增加一行
data.cnt = 0;
即将结构中cnt的值赋为0 ;
现在代码会被修改成类似:
open_db(p); memcpy(&data, p, sizeof(data)); data.cnt = 0;
再继续。
找到类似这样的一句:
strcmp(azArg[1],"stdout")==0
在它的下面的括号中:
将 strcpy(p->outfile,"stdout");
用 p->outfilep = "stdout";
来替换。
再在它下面的5-6行处
将:
strcpy(p->outfile,azArg[1]);
用:
strcpy(outfilename,azArg[1]); p->outfilep = outfilename;
替换。
再继续,找到类似这样的一句:
fprintf(p->out,"%9.9s: %s\n","output",
将:
fprintf(p->out,"%9.9s: %s\n","output", strlen(p->outfile) ? p->outfile : "stdout");
用:
fprintf(p->out,"%9.9s: %s\n","output", p->outfilep && strlen(p->outfilep) ? p->outfilep : "stdout");
替换。
完成修改。
-
make
-
make install
make doc make test
(阅读次数:)
|
| 上一篇:点评主流开源数据库的技术特点 下一篇:RoR中用 Sqlite 实现Time类型的一种方法 |
|
[ 收藏]
[ 推荐]
[ 评论(0条)]
[返回顶部] [打印本页]
[关闭窗口] |
|
|
| |
|
| |
|