sqlite合并

2021-06-13 18:47:18

超过100个单独的源文件被连接到Asingle大文件的C代码中名为" sqlite3.c" Andcalled"合并" AmalgamationContains的所有应用程序需要嵌入SQLite.Malgamation文件超过220,000行长,超过7.5mgabytes(截至2018-11-24)。

将SQLite的所有代码组合到一个大文件中使SQLiteeasier部署 - 只有一个文件来跟踪。并且因为所有代码是INA单个翻译单元,编译器可以做出更好的过程间隙导致机器代码速度较快的5%和10%。

SQLite库由102个C代码(如3.9.0 - 2015-10-14)中的102个文件组成,其中包含32个额外文件,implent oppling fts3,fts5,rtree,dbstat,json1和rbu扩展。主要源文件,大约75%是C代码,大约25%是C头文件。这些都是"来源"文件中的文件在SQLite版本控制系统中,在普通文本编辑器中手动编辑。但是使用ScriptSor辅助程序生成一些C语言文件。例如,parse.yfile包含一个LALR(1)语言的SQL语言,该语言被编译为文件&#34中的解析器; parse.c"和#34; parse.h"由柠檬解析器生成器。

sqlite的makefiles有一个" sqlite3.c"建立文件的目标我们呼叫"合并"融合是一个C代码文件,名为" sqlite3.c"那些包含核心SQLite库和FTS3的所有C代码,fts5,rtree,dbstat,json1和rbu扩展。这个文件包含大约184k行代码(113k如果省略空行和注释),并且超过6.4 megabytesin尺寸。虽然各种扩展名包括在" sqlite3中.c"合并文件,它们是使用#ifdef语句禁用的。使用编译时选项激活扩展名:

合并包含将SQLite集成到更大项目中所需的一切。只需将合并复制到您的源目录中并与项目中的其他C代码文件复制。(更详细地讨论了编译过程即可。)您可能还希望使用" sqlite3.h& #34;定义SQLite编程API的标题文件。 SQLite3.h标题文件单独使用。 SQLite3.h文件也包含在融合中,是前几千线。因此,如果您有SQLite3.c的副本,但似乎无法找到SQLite3.h,您可以通过复制和粘贴来自合并来复制和粘贴来重新生成SQLite3.h。

除了使SQLite更容易合并到其他项目中,合并还使其运行更快。当它在单个翻译单元中包含在诸如合并中的单个翻译单元中时,许多人能够在代码上进行额外的优化。当我们使用合并编译SQLite而不是单个源文件时,我们在5到10%之间测量了5%和10%的性能改进。该额外优化通常采用函数内联的形式,这倾向于使得产生的尺寸更大。

开发人员有时会遇到麻烦调试185,000行长的合并源文件,因为一些德鲁格卡尔只能处理小于32,768的源代码行号。合并源代码运行正常。一个只是无法在调试器中单独踩它。

为了规避这一限制,融合也是可用的拆分形式,由文件" sqlite3-1.c&#34 ;," sqlite3-2.c",andso,每个文件都是少于32,768行,并且文件的连接位于文件的串联中包含所有代码,用于合并算法。然后有一个名为" sqlite3-all.c和#34的单独的源文件;基本上由这样的代码组成:

应用分裂合并的应用程序只是编译反对" sqlite3-all.c"而不是" sqlite3.c"这两个文件完全相同。但是用" sqlite3-all.c",没有单一源文件包含oreThan 32,767行代码,因此使用Somedebugger更方便。分割合并的缺点是它由6个C源代码文件而不是1。

合并和SQLite3.h头文件可在下载页面上作为名为SQLite-Amalgamation-X.zipwhere的文件可用,X被适当的版本号替换。

为了构建合并(完整的融合或算法),首先从三个服务器中的一台获得规范源代码。然后,在unix的系统和具有免费Mingw开发的Windows系统上,合并可以是使用以下命令构建:

在这两种情况下,可以通过拟许&#34获得分割合并; SQLite3-All.C" for" sqlite3.c"作为制作目标。

构建过程大量使用TCL脚本语言。您需要拥有TCL的TCL脚本,以便为上述制作目标进行工作。易于使用的安装人员可以从http://www.tcl-lang.org/.Many UNIX工作站获得TCL默认安装。