当前位置:数据库 > SQLite >>

SQLite编译安装步骤

答案:
SQLite编译安装步骤
  1. Why
    为了编译应用程序,首先要把sqlite源码包编译安装到系统。
  2. What
    1. 输入
    2. 输出
      1. 头文件
        /usr/local/include/sqlite.h
      2. 库文件
        /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
      3. 文档
        bld/doc目录下的超文本文件。
      4. 运行程序
        /usr/bin/sqlite
  3. Where
    在Fedora 3.0环境下进行。
  4. How
    1. 下载
      下载sqlite:你可以到http://www.sqlite.org/download.html,下载sqlite-2.8.16.tar.gz软件包;
    2. 解压
      将下载的软件包解压缩到uClinux-dist/user目录下;

        命令:

      $tar zxvf sqlite-2.8.16.tar.gz -C uClinux-dist/user/

        现在在uclinux的user目录下,你应该可以看到sqlite目录了。解压缩到这个user目录主要是要将sqlite编译成一个普通的用户应用程序。
    3. 建立安装目录
      在同级目录下建立一个子目录:
      mkdir bld
      cd bld
      ../sqlite/configure
    4. 修改配置
      好,现在我们就要对sqlite进行修改,来做移植工作。

        在下面的描述中,我们将对以下几个文件进行一定的添加、修改,从而来完成sqlite在uclinux下的编译:

      bld/main.mk 修改
      bld/Makefile 添加
      sqlite/src/os.c 修改
      sqlite/src/shell.c 修改

        对这几个文件进行修改时,请自己做好这些文件的备份,比如你可以将它们拷贝一份,改名成文件名后面带.bak。这个很重要,可以避免你在修改的过程出现问题而无法还原。
      1. 修改main.mk
        一、修改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项。
      2. 修改Makefile
        删除包含TCLSQLITE的部分。
      3. 修改sqlite/src/os.c
        修改sqlite/src/os.c

          如果你的sqlite包中包括os.c文件那么就对其进行修改,没有os.c文件可能是你的sqlite版本比较新,那么无须修改。

          将所有你找到的:

        if( s!=0 )

          用:

        if( s!=0 && errno != ENOSYS )

          替换。
      4. 修改sqlite/src/shell.c
        修改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";

        上一个:走进全文搜索(PHP+SQLite) 一
        下一个:SQLite研究之phpSQLiteAdmin

CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,