您当前的位置:首页 > 电脑百科 > 程序开发 > 编程百科

新版SQLite源码下载与编译

时间:2021-04-20 10:22:10  来源:今日头条  作者:水经注GIS

概述

“最新版GDAL源码下载 ”一文中,我们为大家分享了最新版本的GDAL源码,而GDAL是需要依赖PROJ投影转换库的。

因此,在最新版投影转换工具PROJ源码 ”一文中,我们又为大家分享了PROJ的源码,如果你对PROJ源码进行编译,会发现它会需要SQLite的支持。

这里,我们再为大家分享SQLite的源码下载与编译的方法,你可以通过关注微信公众号“水经注GIS”并回复“SQLite”获取最新版本的SQLite源码与基于VS2015的编译工程文件。

什么是SQLite?

SQLite是一个进程库,实现了一个自包含的,无服务器,零配置及事务性的SQL数据库引擎。

SQLite的源代码是公开的,因此可以免费用于任何目的,无论是否是商业目的。

SQLite是世界上部署最广泛的数据库,其应用程序数量超出我们的想象,其中包括Adobe公司、Airbus公司、FaceBook、微软、苹果和谷歌等世界知名企业,SQLite数据库文件也是美国国会图书馆推荐的存储格式。

SQLite是嵌入式SQL数据库引擎,与大多数其他SQL数据库不同,SQLite没有单独的服务器进程。

SQLite直接读取和写入普通磁盘文件,具有多个表、索引、触发器和视图的完整SQL数据库包含在单个磁盘文件中。

数据库文件格式是跨平台的,因此可以在32位和64位系统之间或在big-endian和 little-endian 体系结构之间自由复制数据库,这些功能使SQLite成为应用程序文件格式的流行选择。

SQLite是一个紧凑的库,启用所有功能后,库大小可以小于600KB,具体取决于目标平台和编译器优化的设置。

SQLite在内存越大的情况下运行速度就越快,即使在低内存环境下,性能通常也相当不错,甚至可能会比直接通过系统I/O读取更快。

如何下载最新版SQLite源码

最新版本的SQLite源码可以到官方网站下载,在官方网站的第一项下载链接即为源码,如下图所示。

新版SQLite源码下载与编译

 

SQLite官网

另外,还需要下载模块定义文件sqlite3.def,否则无法生成sqlite3.lib库,如下图所示。

新版SQLite源码下载与编译

 

下载预编译文件

为了便于使用,可以把源码和预编译文件的32位与64位版本都下载下来,如下图所示。

新版SQLite源码下载与编译

 

源码文件压缩包

将文件进行解压,根据实际需要,预编译文件可以选择32位或64位版本,最后将源码文件汇总到一个目录中备用,如下图所示。

新版SQLite源码下载与编译

源码文件

以上准备工作就绪之后,接下来就可以对源码进行编辑了。

如何基于VS2015编译SQLite源码

我们基于VS2015对SQLite源码进行编译,如果你还没有任何编译工具,请参阅“Visual Studio 2015 安装教程(附安装包)”一文部署安装编译环境。

在VS2015中新建一个名为“sqlite3”的Win32项目,如下图所示。

新版SQLite源码下载与编译

新建Win32项目

点击下一步继续,然后在应用程序设置中选择“DLL”和“空项目”,如下图所示。

新版SQLite源码下载与编译

应用程序设置

项目新建完成后,将之前准备的源码文件复制到工程目录,如下图所示。

新版SQLite源码下载与编译

源代码准备

通过添加现有项功能,将头文件sqlite.h和sqlite3ext.h添加到工程中,如下图所示。

新版SQLite源码下载与编译

导入源码头文件

另外,也需要将shell.c、sqlite3.c和sqlite3.def添加到源文件中,如下图所示。

新版SQLite源码下载与编译

导入源码完成

现在如果直接编译工程,则不会生成sqlite3.lib库文件,因此需要在项目属性中设置sqlite3.def模块定义文件,如下图所示。

新版SQLite源码下载与编译

配置模块定义文件

现在将源码进行编辑之后,会生成许多错误提示:

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_column_database_name

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_column_database_name16

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_column_origin_name

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_column_origin_name16

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_column_table_name

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_column_table_name16

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_deserialize

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_fts3_may_be_corrupt

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_fts5_may_be_corrupt

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_preupdate_count

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_preupdate_depth

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_preupdate_hook

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_preupdate_new

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_preupdate_old

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_rtree_geometry_callback

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3_rtree_query_callback

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3_serialize

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changegroup_add

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changegroup_add_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changegroup_delete

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changegroup_new

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changegroup_output

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changegroup_output_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_Apply

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_apply_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_apply_v2

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_apply_v2_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_concat

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_concat_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_conflict

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_finalize

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_fk_conflicts

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_invert

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_invert_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_new

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_next

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_old

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_op

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_pk

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_start

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_start_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3changeset_start_v2

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3changeset_start_v2_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3rebaser_configure

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3rebaser_create

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3rebaser_delete

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3rebaser_rebase

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3rebaser_rebase_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_attach

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_changeset

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3session_changeset_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_config

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_create

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_delete

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_diff

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_enable

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_indirect

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_isempty

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3session_memory_used

1>sqlite3.def : error LNK2001: 无法解析的外部符号 sqlite3session_patchset

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3session_patchset_strm

1>sqlite3.def : error LNK2001: 无法解析的外部符号
sqlite3session_table_filter

生成错误的原因,是因为在sqlite3.def中定义的函数在源码中默认没有导出,需要在工程属性中添加以下预处理定义,如下所示。

SQLITE_CORE

SQLITE_EXPORTS

SQLITE_ENABLE_FTS3

SQLITE_ENABLE_FTS5

SQLITE_ENABLE_RTREE

SQLITE_ENABLE_COLUMN_METADATA

SQLITE_ENABLE_SESSION

SQLITE_ENABLE_PREUPDATE_HOOK

SQLITE_ENABLE_DESERIALIZE

新版SQLite源码下载与编译

添加宏定义

只要上述配置正确,无论是在Debug还是Release版本下都可以编译成功,如下图所示。

新版SQLite源码下载与编译

编译成功

编译成功后,就可以在源码工程的Debug或Release目录中找到sqlite3.dll和sqlite3.lib文件,如下图所示。

新版SQLite源码下载与编译

编译结果

现在,我们将下载的源码文件压缩包,编译成功的工程源码整理到了一个目录中,如下图所示。

新版SQLite源码下载与编译

分享资料整理

为了方便分享,我们将上述整理好的文件打包上传到了百度网盘中,请通过关注微信公众号“水经注GIS”,然后在后台回复“SQLite”可获取下载地址。

总结

SQLite代码库由一支全职从事SQLite工作的国际开发人员团队支持,以持续扩展SQLite的功能并增强其可靠性和性能,同时保持与已发布的接口规范,以及SQL语法和数据库文件格式的向后兼容性。

最后,如果你在SQLite源码编译过程中遇到任何难题,请通过关注公众号“水经注GIS”并在后台留言告诉我们,我们将竭尽所能地为你提供帮助,从而将我们“为用户提供丰富的地图数据与专业的GIS服务”之宗旨落到实处!



Tags:SQLite   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
读取SQLite数据库,就是读取一个路径\\192.168.100.**\position\db.sqlite下的文件<startup useLegacyV2RuntimeActivationPolicy="true"> <supportedRuntime version="v4.0"/...【详细内容】
2021-12-16  Tags: SQLite  点击:(21)  评论:(0)  加入收藏
概述“最新版GDAL源码下载 ”一文中,我们为大家分享了最新版本的GDAL源码,而GDAL是需要依赖PROJ投影转换库的。因此,在最新版投影转换工具PROJ源码 ”一文中,我们又为大家分享了...【详细内容】
2021-04-20  Tags: SQLite  点击:(258)  评论:(0)  加入收藏
应用程序经常需要保存数据。无论你的用户是创建简单的文本文档、复杂的图形布局、游戏进度还是错综复杂的客户和订单号列表,软件通常都意味着生成数据。有很多方法可以存储数...【详细内容】
2021-03-01  Tags: SQLite  点击:(161)  评论:(0)  加入收藏
SQLite是一个轻型的数据库,无需任何服务,无需任何配置的绿色数据库。SQLite是一个进程内库,它实现了一个自包含、无服务器、零配置、事务性SQL数据库引擎。SQLite的代码在公共...【详细内容】
2020-11-09  Tags: SQLite  点击:(252)  评论:(0)  加入收藏
SQLite是一个非常受欢迎的数据库,在数据库排行榜中已经进入前十的行列。这主要是因为该数据库非常小巧,而且可以支持Linux、Windows、iOS和Andriod的主流的操作系统。 SQLite...【详细内容】
2020-09-25  Tags: SQLite  点击:(91)  评论:(0)  加入收藏
Linux是一款免费开源的操作系统,由于其自由、开放、安全、稳定等诸多特点,已被各大IT公司广泛地应用于服务器和嵌入式设备中。由于数据存储的需要,Linux操作系统需要搭配一套性...【详细内容】
2020-09-03  Tags: SQLite  点击:(85)  评论:(0)  加入收藏
如果你是软件开发人员,相信你一定知道或者曾经使用过一个非常轻量级的数据库&mdash;&mdash;SQLite。它具有作为关系数据库所需的几乎所有功能,但是这个数据库把所有功能都保存...【详细内容】
2020-08-04  Tags: SQLite  点击:(68)  评论:(0)  加入收藏
SQLite数据库通常存储在单个普通磁盘文件中。但是,在某些情况下,数据库可能存储在内存中。 强制SQLite数据库单纯的存在于内存中的最常用方法是使用特殊文件名“ :memory: ” 打...【详细内容】
2019-12-09  Tags: SQLite  点击:(238)  评论:(0)  加入收藏
1.概述SQLite支持三种不同的线程模式: 单线程。在此模式下,所有互斥锁都被禁用,并且SQLite一个链接不能在多个线程中使用。 多线程。在这种模式下,只要在两个或多个线程中不同时...【详细内容】
2019-12-09  Tags: SQLite  点击:(76)  评论:(0)  加入收藏
▌简易百科推荐
摘 要 (OF作品展示)OF之前介绍了用python实现数据可视化、数据分析及一些小项目,但基本都是后端的知识。想要做一个好看的可视化大屏,我们还要学一些前端的知识(vue),网上有很多比...【详细内容】
2021-12-27  项目与数据管理    Tags:Vue   点击:(1)  评论:(0)  加入收藏
程序是如何被执行的&emsp;&emsp;程序是如何被执行的?许多开发者可能也没法回答这个问题,大多数人更注重的是如何编写程序,却不会太注意编写好的程序是如何被运行,这并不是一个好...【详细内容】
2021-12-23  IT学习日记    Tags:程序   点击:(9)  评论:(0)  加入收藏
阅读收获✔️1. 了解单点登录实现原理✔️2. 掌握快速使用xxl-sso接入单点登录功能一、早期的多系统登录解决方案 单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器...【详细内容】
2021-12-23  程序yuan    Tags:单点登录(   点击:(8)  评论:(0)  加入收藏
下载Eclipse RCP IDE如果你电脑上还没有安装Eclipse,那么请到这里下载对应版本的软件进行安装。具体的安装步骤就不在这赘述了。创建第一个标准Eclipse RCP应用(总共分为六步)1...【详细内容】
2021-12-22  阿福ChrisYuan    Tags:RCP应用   点击:(7)  评论:(0)  加入收藏
今天想简单聊一聊 Token 的 Value Capture,就是币的价值问题。首先说明啊,这个话题包含的内容非常之光,Token 的经济学设计也可以包含诸多问题,所以几乎不可能把这个问题说的清...【详细内容】
2021-12-21  唐少华TSH    Tags:Token   点击:(9)  评论:(0)  加入收藏
实现效果:假如有10条数据,分组展示,默认在当前页面展示4个,点击换一批,从第5个开始继续展示,到最后一组,再重新返回到第一组 data() { return { qList: [], //处理后...【详细内容】
2021-12-17  Mason程    Tags:VUE   点击:(14)  评论:(0)  加入收藏
什么是性能调优?(what) 为什么需要性能调优?(why) 什么时候需要性能调优?(when) 什么地方需要性能调优?(where) 什么时候来进行性能调优?(who) 怎么样进行性能调优?(How) 硬件配...【详细内容】
2021-12-16  软件测试小p    Tags:性能调优   点击:(19)  评论:(0)  加入收藏
Tasker 是一款适用于 Android 设备的高级自动化应用,它可以通过脚本让重复性的操作自动运行,提高效率。 不知道从哪里听说的抖音 app 会导致 OLED 屏幕烧屏。于是就现学现卖,自...【详细内容】
2021-12-15  ITBang    Tags:抖音防烧屏   点击:(23)  评论:(0)  加入收藏
11 月 23 日,Rust Moderation Team(审核团队)在 GitHub 上发布了辞职公告,即刻生效。根据公告,审核团队集体辞职是为了抗议 Rust 核心团队(Core team)在执行社区行为准则和标准上...【详细内容】
2021-12-15  InfoQ    Tags:Rust   点击:(24)  评论:(0)  加入收藏
一个项目的大部分API,测试用例在参数和参数值等信息会有很多相似的地方。我们可以复制API,复制用例来快速生成,然后做细微调整既可以满足我们的测试需求1.复制API:在菜单发布单...【详细内容】
2021-12-14  AutoMeter    Tags:AutoMeter   点击:(20)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条