sqlite - 如何编译 18 年前发布的 sqlite-1.0.1
问题描述
我想通过阅读它的源代码来学习 sqlite。我发现sqlite-1.0.1只包含 10,000+ 行代码,也许它很容易阅读。但不幸的是,现代 gcc 无法编译 sqlite-1.0.1。
wget "https://www.sqlite.org/src/tarball/e8521fc1/SQLite-e8521fc1.tar.gz"
tar xzvf SQLite-e8521fc1.tar.gz
mkdir bld && cd bld
../SQLite-e8521fc1/configure --prefix=/opt/sqlite-1.0.1 --with-tcl=no
make
当我发布make
时,它报告了
gcc -std=c89 -g -O2 -o lemon ../SQLite-e8521fc1/tool/lemon.c
In file included from ../SQLite-e8521fc1/tool/lemon.c:29:
/usr/lib/gcc/i386-redhat-linux/3.4.2/include/varargs.h:4:2: #error "GCC no longer implements <varargs.h>."
/usr/lib/gcc/i386-redhat-linux/3.4.2/include/varargs.h:5:2: #error "Revise your code to use <stdarg.h>."
我尝试在 中添加-std=c89
以下内容,但没有成功。gcc
Makefile
我特地装了一个老的Fedora Core release 3虚拟机来编译SQLite-1.0.1,但是看起来Fedora 3里面的gcc(gcc version 3.4.2 20041017(Red Hat 3.4.2-6.fc3))还是太现代 18 年前的代码。
我找到了一个check in,里面<varargs.h>
被替换了<stdarg.h>
,作者说可能他lemon.c
1989年用gcc编译过。
也许一个非常旧的 gcc 或 Linux(2000 年之前)可以解决这个问题,但是我怎样才能得到那个呢?
解决方案
推荐阅读
- c# - 多线程 Web API 应用程序
- r - 使用 uniroot.all 查找包含数组的函数的根
- scala - 如何在 HDFS 中编写黄瓜 json 报告
- docker - 如何让 Eureka 客户端使用主机 IP 而不是 Docker 容器的 IP?
- android - 如何在整个项目中找到特定的警告
- reactjs - 使用 reactjs 在 UI 中显示 YAML 文件?
- r - 从数据框中的行复制与模式匹配的字符串并放入新数据框中的新列
- android - Koin 在关闭后重新注入实例
- sql - 需要通过查询验证日期跨度条件
- android - 在 InApp 计费库 [android] 的响应中检测测试购买