欢迎光临!
若无相欠,怎会相见

SQLite – 编译第一个 commit 提交的成品 SQLite

序言

一般来说, 从开源代码的第一个提交开始看, 比较容易学习, 因为代码量比较少, 容易理清思绪。 那么这次就从 SQLite 的第一个 commit 提交开始搞起。

补充一下, 代码在 Linux 系统上编译, 也可以在 WSL 子系统上进行编译。 我本人使用的是 WSL kali-linux, 属于 debian 系, 使用 apt 进行软件包安装

具体可编译代码参考我的 github: https://github.com/Deteriorator/SQLite-Notes

步骤

经过我的多方查找, 终于找到了 SQLite 的历史 release 节点, 在这里分享给大家, 有需要自行去了解下载代码。

https://www.sqlite.org/chronology.html 这个就是 SQLite 的所有历史 release 结点。 而第一个 commit 实际上是 CVS 1, 因为这个 commit 才包含有源代码, 另一个并没有代码, 那么需要从最古老的 1.0 开始查找, 进入 1.0 后继续向下翻才能找到 CVS 1。

下载

可以通过 https://www.sqlite.org/src/ci/6f3655f79f9b6fc9 页面的 Downloads 后的链接进行下载。 我所给的链接就是 CVS 1 的链接

修正代码

如标题所言, 代码有些古老, GCC 由于已经不支持 varargs.h 头文件, 所以需要进行必要的修正, 例如 lemon 工具的代码, 当然我不会改正其他代码, 需要看的是原汁原味的 SQLite 第一个 commit 的代码。

首先到这个 commit https://www.sqlite.org/src/vinfo/7902e4778ec86e25 下面拿到 lemon.c 和 lempar.c 文件, 因为是从这个 commit 开始不再支持 varargs.h, 改用 stdarg.h。这两个文件是配套使用的, 最好不要让它们两个文件差异过大。 当然 lemon 只是辅助工具, 修正代码方便我们编译。

接下来需要添加 parse.y 文件, 这个文件通过 lemon 的编译, 生成 parse.h 和 parse.c 文件, 这两个文件是不可缺少的。 而 CVS 1 中并没有 parse.y 文件, 通过我后续的查看历史提交, 猜测应该是作者忘记提交了, 而第一次添加 parse.y 文件是 CVS 6 https://www.sqlite.org/src/info/1517f85243b63511。 我们把它复制出来并添加到 src 目录下面。

不要使用时间相差太多的代码, 不然编译的时候会各种报错。

安装依赖

根据我自己的实践, 需要安装 gdbm 和 readline 库, 直接执行命令进行安装

sudo apt install libgdbm-dev libreadline-dev

这个命令是 debian 系 Linux 的命令, 其他发行版请自行查找。

尝试编译

代码修正的差不多了, 我们并没有改动 SQLite 源代码, 只是修正了必要的工具的代码。

首先进入 WSL 子系统并进入代码跟目录, 执行 configure 脚本

bash /mnt/e/Projects/github/SQLite-Notes/First-Commit/Modified/SQLite-6f3655f7/configure

需要注意的是, configure 文件执行的时候请使用绝对路径的方式执行, 如果直接在代码根目录执行 ./configure 会报错的。

configure 脚本会生成 Makefile 文件, 然后执行

make

如果不出意外的话, 会生成 sqlite 可执行文件, 虽然会有部分 warning, 但是这没关系

如图所示, 编译完成, 生成了最终的产物 sqlite 和 libsqlite.a 文件。

测试 SQLite

执行如下命令:

mkdir data
./sqlite data

可以看出, 最早期的 SQLite 与现在的 SQLite 在数据存储上有很大不同, 现在的 SQLite 存储数据到一个 db 文件中, 而早期的 SQLite 则将数据存储到一个文件夹里, 数据表则是一个文件。

结语

OK, 终于将 SQLite 的第一个提交编译完成了, 我所遇到的坑都已经记录在这篇文章中了。

如有错误, 敬请指出, 感谢指正!      — 2021-10-10 23:12:53

赞(0) 打赏
转载请注明:飘零博客 » SQLite – 编译第一个 commit 提交的成品 SQLite
分享到: 更多 (0)

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址

欢迎光临