技术领导者
我思想,我创造,我快乐

导航

Blog统计
  • 文章 - 17
  • 收藏 - 0
  • 评论 - 7
  • Trackbacks - 0

文章

收藏

    相册

      Blog

      存档


      正在读取评论……
       

      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";

              来替换。

              再在它下面的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");

               替换。

              完成修改。

        5. 编译
          make
        6. 安装
          make install
          make doc
          make test


      Trackback: http://tb.donews.net/TrackBack.aspx?PostId=292256


      [点击此处收藏本文]  发表于2005年03月01日 4:33 PM




      正在读取评论……
      大名
      网址
      验证码
      评论