小。速度很快。可靠。
选择任意三个选项。
如何编译SQLite
如何编译SQLite

概述

SQLite是ANSI-C源代码。它必须先编译成机器代码,然后才有用。本文是关于编译SQLite的各种方法的指南。

本文不包含编译的分步方法苏莱特。这将是困难的,因为每个发展情况是不同的。相反,本文描述并说明了SQLite的编译。示例中提供了典型的编译命令期望应用程序开发人员能够使用这些示例作为开发自己的自定义编译过程的指南。换句话说,这篇文章提供了想法和见解,而不是交钥匙解决。

1合并与单个源文件

SQLite由一百多个C代码和脚本文件构建而成分布在多个目录中。SQLite的实现是纯粹的ANSI-C,但许多C语言源代码文件都是由辅助C程序和AWK、SED和TCL生成或转换脚本,然后将其合并到完成的SQLite库中。构建必要的C程序并转换和/或创建SQLite的C语言源代码是一个复杂的过程。

为了简化问题,SQLite也可以作为预打包的合并源代码文件:方形3.c.合并是实现整个SQLite库的ANSI-C代码的单个文件。合并要容易得多。一切都包含在内在单个代码文件中,因此很容易放入源代码树更大的C或C++程序。所有代码生成和转换已执行步骤,因此没有辅助C程序配置和编译,没有要运行的脚本。而且,因为整个库包含在单个翻译单元中,编译器可以进行更高级的优化,从而获得5%到10%的性能改进。由于这些原因,合并源文件("方形3.c“)建议用于所有应用程序。

使用合并建议用于所有应用。

直接从单个源代码文件构建SQLite当然是可能,但不建议这样做。对于某些特殊应用,它可能需要以无法完成的方式修改构建过程只使用从网站下载的预先构建的合并源文件。对于这些情况,建议进行定制合并建造(如所述在下面)和已使用。换句话说,即使项目需要构建SQLite从单个源文件开始,仍然建议合并源文件用作中间步骤。

2编译命令行接口

的构建命令行界面需要三个源文件夹:

上述所有三个源文件都包含在合并柏油球在上可用下载页面.

要构建CLI,只需将这三个文件放在同一目录中并将它们编译在一起。使用MSVC:

cl-shell.c sqlite3.c-Fesqlite3.exe

在Unix系统上(或在Windows上使用cygwin或mingw+msys)命令通常如下所示:

gcc外壳.c sqlite3.c-lpthread-ldl-lm-o sqlite3

要使SQLite线程安全,需要pthreads库。但是由于CLI是单线程的,我们可以指示SQLite构建在非线程安全模式下,因此省略pthreads库:

gcc-DSQLITE_THREADSAFE=0 shell.c sqlite3.c-ldl-lm-o sqlite3

需要-ldl库来支持动态加载sqlite3_load_extension()接口和load_extension()SQL函数。如果不需要这些功能,则可以使用SQLITE_OMIT_LOAD_EXTENSION数据库编译时间选项:

gcc-DSQLITE_THREADSAFE=0-DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c-o sqlite3

一方可能希望提供另一方编译时间选项例如

为了在中看到额外的注释解释列表,添加-DSQLITE_ENABLE_EXPLAIN_COMMENTS公司选项。添加-DHAVE_READLINE和-lreadline和-lncurces库用于进行命令行编辑支持。可能还需要指定一些编译器优化开关。(预编译CLI可从SQLite下载网站使用“-Os”。)这里有无数可能的变化。A类编译全功能shell的命令可能类似于这个:

gcc-Os-I.-DSQLITE_THREADSAFE=0-DSQLITE_ENABLE_FTS4\-DSQLITE_ENABLE_FTS5-DSQLIT_ENABLE_JSON1\-DSQLITE_ENABLE_RTREE-DSQLIT_ENABLE_EXPLAIN_COMMENTS\-DHAVE_阅读\shell.c sqlite3.c-ldl-lm-lreadline-lncurses-o sqlite3

关键点是:构建CLI包括编译两个C语言文件。这个外壳。c(c)文件包含入口点和用户输入循环的定义以及SQLite拼合方形3.c包含完整的实现SQLite库的。

三。编译TCL接口

SQLite的TCL接口是一个小模块,添加到定期合并。结果是一个新的合并源文件名为“tclsqlite3.c“。这个单一源文件就是生成可以加载到标准tclsh公司希望使用TCL加载命令,或生成内置SQLite的独立tclsh。tcl合并的副本包含在下载页面作为中的文件TEA柏油球.

要为Linux上的SQLite生成TCL可加载库,请执行以下操作命令就足够了:

gcc-o libtclsqlite3.so-shared tclsqliste3.c-lpthread-ldl-ltcl

为Mac OS X和Windows构建共享库并不是那么简单,不幸的是。对于这些平台,最好使用configure脚本和包含在TEA柏油球.

要生成与SQLite静态链接的独立tclsh,使用此编译器调用:

gcc-DTCLSH=1 tclsqlite3.c-ltcl-lpthread-ldl-lz-lm

这里的技巧是-DTCLSH=1选项。TCL接口模块SQLite包括一个主()初始化TCL解释器的过程并在使用-DTCLSH=1编译时进入命令行循环。这个上述命令在Linux和Mac OS X上都有效,但可能需要调整库选项取决于平台和TCL的哪个版本正在链接到。

4构建融合

上提供的SQLite合并版本下载页面通常对大多数用户来说都足够了。然而,一些项目可能希望或需要建立自己的合并。一个普通的建立自定义合并的原因是为了使用编译时间选项自定义SQLite库。回想一下SQLite合并包含许多C代码,由辅助程序和脚本。许多编译时间选项影响此生成的代码,并且必须提供给代码合并前的发电机。这套必须传递到代码生成器中的编译时选项可以不同版本的SQLite会有所不同,但目前编写(circa SQLite 3.6.20,2009-11-04)必须代码生成器知道的内容包括:

要构建自定义合并,首先下载原始个人源文件放到Unix或类Unix开发平台上。确保获得原始来源文件而不是“预处理的源文件”。一个人可以获得完整的来自下载页面或直接来自配置管理系统.

假设SQLite源树存储在名为“SQLite”的目录中。计划在名为(for)的并行目录中构建合并示例)“bld”。首先通过以下任一方法构造适当的Makefile运行SQLite源代码树顶部的configure脚本,或通过在源树顶部制作一个模板Makefiles的副本。然后手动编辑此Makefile以包含所需的编译时间选项。最后运行:

生成sqlite3.c

或在带有MSVC的Windows上:

nmake/f生成文件.msc sqlite3.c

“sqlite3.c”make目标将自动构造正则"方形3.c“合并源文件,其头文件"平方米3.h“和”tclsqlite3.c“合并来源包含TCL接口的文件。然后,可以将所需的文件复制到项目目录和根据上述程序编制。

5构建Windows DLL

要构建SQLite的DLL以在Windows中使用,请首先获取适当的合并源代码文件sqlite3.c和sqlite3.h。这些可以是从下载SQLite网站或从如上所示的源自定义生成。

如果源代码文件位于工作目录中,则DLL可以使用MSVC通过以下命令生成:

cl-sqlite3.c-link-dll-out:sqlite3.dll

上述命令应从MSVC本机工具命令运行提示。如果您的计算机上安装了MSVC,您可能对于本机生成,具有此命令提示符的多个版本用于x86和x64,也可能用于交叉编译到ARM。根据所需的DLL使用适当的命令提示符。

如果使用MinGW编译器,命令行如下:

gcc-共享sqlite3.c-o sqlite3.dll

请注意,MinGW仅生成32位DLL。有一个单独的MinGW64项目,可用于生成64位DLL。大概吧命令行语法类似。还请注意,MSVC的最新版本生成的DLL将不起作用在WinXP和更早版本的Windows上。因此,为了实现最大的兼容性建议使用MinGW。一条很好的规则是使用MinGW生成32位DLL,使用MSVC生成64位DLL。

在大多数情况下,您需要用以下命令来补充上述基本命令编译时间选项适合您的应用程序。常用编译时选项包括:

此页面上次修改时间2023-10-10 17:29:48联合技术公司