sql文件怎么打开_其实SQLite 很容易编译

原始标题:实际上SQLite很容易编译

上周,我在一个数据库网站上工作(https://sql-steps.wizardzines.com/,一个数据库示例列表)我使用sqlite来运行网站上的所有查询,我想在一个例子中使用一个窗口函数(这个)然而,我使用的是Ubuntu 18.04的sqlite版本,它太旧了,不支持窗口功能。所以我需要升级sqlite!事实证明,这个过程极其麻烦(和往常一样),但非常有趣!我想到了一些关于可执行文件和共享库如何工作的信息,结论是令人满意的。所以我想把它写在这里

尝试1:从其网站下载SQLite二进制文件

SQLite的下载页面有一个指向用于Linux的SQLite命令行工具的二进制文件的链接我下载了它,它可以在笔记本电脑上运行。我以为已经结束了。

,但后来我试图在构建服务器(Netlify)上运行它,得到了一个非常奇怪的错误消息:“找不到文件。”我跟踪了它,并确保execve返回了错误代码ENOENT,意思是“找不到文件”这有点疯狂,因为该文件确实存在并且具有正确的权限。

我搜索了这个问题(通过搜索“精确的enoen”)并在这个stackoverflow中找到了答案,它指出要运行二进制文件,您不仅需要二进制文件的存在!你也需要它的加载器存在。(加载程序的路径在二进制文件中)要查看加载程序的路径,您可以如下使用ldd:

$ LDD SqLite 3

/lib/i386-Linux-GNU/libm . so . 6(0xf 7e 6e 000)

libz . so . 1 = & gt。/lib/i386-Linux-GNU/libz . so . 1(0xf 7e 4f 000)

libc . so . 6 = & gt。/lib/i386-Linux-GNU/libc . so . 6(0x f7c 73000)

/lib/LD-Linux . so . 2

so/lib/LD-Linux . so . 2是加载程序,该文件不存在于生成服务器上。这可能是因为Xenial(Xenial是Ubuntu 16.04和18.04“仿生海狸”应该在本文中使用)安装程序不支持32位二进制文件(?),所以我需要尝试一些不同的东西。

尝试2:安装Debian sqlite3软件包

好的,我想我可以通过Debian测试安装sqlite软件包尝试从我不使用的另一个Debian版本安装软件包不是一个好主意,但是出于某种原因,我决定尝试一下。

这次没有意外破坏我计算机上的sqlite(也破坏了git),但是我设法通过Sudodkg-Pure-Force-Alllib sqlite 3-0恢复,并使所有依赖于SQLite的软件再次工作。

尝试3:提取Debian sqlite包

我还尝试只从Debian sqlite包中提取SQLite二进制文件并运行它毫不奇怪,这也不起作用,但这更容易理解:我有旧版本的libreadline(.so.7),但它需要。so.8。

美元。/usr/bin/sqlite3

。/usr/bin/ SQLite3:错误加载共享库时:libreadline . so . 8:can not penshared object file:nosuchfileordirector

尝试4:编译

我花这么多时间尝试下载SQLite二进制文件的原因是我认为从源代码编译sqlite既烦人又耗时。但是显然,下载任何sqlite二进制文件都不适合我,所以我最终决定自己编译它。

这是如何编译SQLite的指南这是宇宙中最简单的事情一般来说,编译感觉是这样的:

运行。/configure

意识到我缺少再次运行的依赖项

。/configure

运行make

编译失败,因为我安装了错误版本的依赖项

来执行其他操作。然后找到二进制文件

,并按如下方式编译SqLite:

从下载页面下载集成tarball

并运行gcc shell。cSQLite 3。c-lpthread-LDL

完成!!!

所有代码都在一个文件中,没有奇怪的依赖关系!极好的

对我来说,我实际上不需要线程支持或读线支持,所以我使用编译页面上的指令创建了一个非常简单的二进制文件,它只使用libc,不使用其他共享库

$ ldd SQLite 3

Linux-vdso . so . 1(0x 00007 FFE 8e 7e 9000)

libc . so . 6 = & gt。/lib/x86 _ 64-Linux-GNU/libc . so . 6(0x 00007 fbea 498800)

/lib 64/LD-Linux-x86-64 . so . 2(0x 00007 fbea 4d 79000)

这很好。因为它使体验sqlite

变得容易,我认为sqlite的构建过程是如此简单和酷,因为在过去我非常乐意编辑sqlite的源代码来理解它的B树的实现。

鉴于我对SQLite的了解,这并不奇怪(它在受限/嵌入式环境中工作良好,因此以非常简单/最小的方式进行编译是有意义的)但这真的很棒!

大家都在看

相关专题