〇、版本信息
Tool | Version |
---|---|
SQLite | 3.7.14 |
tcl | 8.5.9 |
ActiveTcl | 8.5 |
msys | 1.0 |
一、安装所需环境
本次编译所依据的流程是Sqlite源码文件夹中自带的ReadMe文件:
能看出来是在linux环境下的指令,所以我先去配置了一下环境,具体所需如下:
1. 安装mingw64
mingw64为windows提供了GCC编译器。如果你使用IDE是Clion,那么在一开始配置ToolChains的时候你应该已经下过它了(反正我是这样,除非你专门下了个Dev用人家的编译器…)
最后记得将bin文件夹添加到环境变量中即可。
2. 安装Tcl & ActiveTcl
编译sqlite需要tcl。
需要下载tcl源码是因为后面编译时需要用到里面的一些东西,而ActiveTcl是让Tcl全平台运行的一个脚本语言软件。注意配置环境变量。
3.安装msys
Minimal GNU system on Windows 是一个windows下小型的GNU环境,这也是我们本次编译Sqlite的控制台。
二、正式开始编译(无坑版)
- 打开msys,进入GUN控制台,cd进入Sqlite源码所在的文件夹根目录:
(注意下划线的方向,与从文档路径中复制的相反。)
- 运行指令 ./configure,使配置文件生效,生成MakeFile和代码等。
- 先别急着make,先从tcl源码文件夹中拷贝generic目录到sqlite源码根目录中。
然后进入 ./src/tclsqlite.c 文件中,修改头文件引用。
# include "tcl.h"
// 修改其路径如下
# include "../generic/tcl.h"
-
放心大胆地make吧。运行指令make install.
最后可能会报一个小Error(忘截图了),但暂时无所大谓,可以试着进行下一步。
-
此时运行sqlite源码根目录的sqlite.exe或在msys中运行指令sqlite3,都能进入sqlite> 中。
运行指令 .show 来查看 SQLite 命令提示符的默认设置。
至此,sqlite3.7 编译成功。
三、编译Sqlite_3.7过程中的各种坑
运行./configure 让配置文件生效这一步没什么好说的,但紧接着make这一步有一个报错卡了很久:
make时报错提示缺失tcl.h文件。
一开始我以为是运行配置文件时出了些问题,它没有给创建这个头文件,于是回头看配置运行信息:
当时我安装的是最新的 tcl8.6,我以为是这版年代久远的源码没有适配到,于是重新安装了tcl8.5。
但再次配置,还是没检测到,也没有解决这个问题。
又经过一番查询,我感觉这个tcl.h应该不是前面配置文件生成的,而应该是一个某种途径里既存的一个文件,感觉比较难找,所以想直接试试下面的方法:
俗话说解决不了问题就解决提出问题的人嘛。。
结果把tclsqlite.c 删了,make时直接找不到这文件报错退出。应该是依赖关系比较多,直接这样删还是太莽了。并且我们之后阅读源码的过程中是肯定得用tcl的,所以还是得编译这块儿。
最后我下载了tcl源码,终于在里面找到了这个tcl.h…同时还不能只把这一个.h文件复制过去就了事,需要这个文件夹里所有关于tcl的.c文件和.h文件,所以需要将generic整个文件夹复制过去,而后改变头文件引用的路径。
至此tcl.h缺失问题解决。
但最后make结束时还是报了一个Error。虽然无伤大雅,但还是看怎么解决吧。
并且这次编译全程没用现代化ide如vs等等,感觉像是十多年前的解法。。今天借助ide可能在win下编译configure和makefile时能容易点?