序言
一般来说, 从开源代码的第一个提交开始看, 比较容易学习, 因为代码量比较少, 容易理清思绪。 那么这次就从 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
最新评论
这个软件有bug的,客户端windows有些键不能用如逗号、句号
没有收到邮件通知
我的评论通知貌似坏掉了,定位一下问题
测试一下重新部署后的邮件功能
居然看到自己公司的MIB库,诚惶诚恐
那可能是RobotFramework-ride的版本问题。我装的1.7.4.2,有这个限制。我有空再尝试下旧版本吧,感谢回复。
你好!我在python2.7中安装RobotFramework-ride的时候提示wxPython的版本最高是2.18.12,用pip下载的wxPython版本是4.10,而且我在那个路径下没有找到2
真的太好了,太感谢了,在bilibili和CSDN上都找遍了,终于在你这里找到了