新版SQLite源码下载与编译
概述
“最新版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官网
另外,还需要下载模块定义文件sqlite3.def,否则无法生成sqlite3.lib库,如下图所示。
下载预编译文件
为了便于使用,可以把源码和预编译文件的32位与64位版本都下载下来,如下图所示。
源码文件压缩包
将文件进行解压,根据实际需要,预编译文件可以选择32位或64位版本,最后将源码文件汇总到一个目录中备用,如下图所示。
源码文件
以上准备工作就绪之后,接下来就可以对源码进行编辑了。
如何基于VS2015编译SQLite源码
我们基于VS2015对SQLite源码进行编译,如果你还没有任何编译工具,请参阅“Visual Studio 2015 安装教程(附安装包)”一文部署安装编译环境。
在VS2015中新建一个名为“sqlite3”的Win32项目,如下图所示。
新建Win32项目
点击下一步继续,然后在应用程序设置中选择“DLL”和“空项目”,如下图所示。
应用程序设置
项目新建完成后,将之前准备的源码文件复制到工程目录,如下图所示。
源代码准备
通过添加现有项功能,将头文件sqlite.h和sqlite3ext.h添加到工程中,如下图所示。
导入源码头文件
另外,也需要将shell.c、sqlite3.c和sqlite3.def添加到源文件中,如下图所示。
导入源码完成
现在如果直接编译工程,则不会生成sqlite3.lib库文件,因此需要在项目属性中设置sqlite3.def模块定义文件,如下图所示。
配置模块定义文件
现在将源码进行编辑之后,会生成许多错误提示:
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
添加宏定义
只要上述配置正确,无论是在Debug还是Release版本下都可以编译成功,如下图所示。
编译成功
编译成功后,就可以在源码工程的Debug或Release目录中找到sqlite3.dll和sqlite3.lib文件,如下图所示。
编译结果
现在,我们将下载的源码文件压缩包,编译成功的工程源码整理到了一个目录中,如下图所示。
分享资料整理
为了方便分享,我们将上述整理好的文件打包上传到了百度网盘中,请通过关注微信公众号“水经注GIS”,然后在后台回复“SQLite”可获取下载地址。
总结
SQLite代码库由一支全职从事SQLite工作的国际开发人员团队支持,以持续扩展SQLite的功能并增强其可靠性和性能,同时保持与已发布的接口规范,以及SQL语法和数据库文件格式的向后兼容性。
最后,如果你在SQLite源码编译过程中遇到任何难题,请通过关注公众号“水经注GIS”并在后台留言告诉我们,我们将竭尽所能地为你提供帮助,从而将我们“为用户提供丰富的地图数据与专业的GIS服务”之宗旨落到实处!
新版SQLite源码下载与编译相关推荐
- VLC for Android源码下载和编译
Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...
- ros源码下载及编译
Ros1 源码下载及编译 准备工作 Setup your sources.list Setup your computer to accept software from packages.ros.o ...
- WebRTC源码下载与编译
WebRTC源码编译 1 几种源码下载方案对比 1.1 拉别人下好的代码 1.2云服务器 1.3 国内镜像 1.4 挂代理(推荐) 2 源码编译环境准备 2.1 环境要求 2.2 代理服务器配置 2. ...
- Android12 源码下载、编译、刷机、单编调试Framework
文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...
- 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译
本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...
- 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...
本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...
- SELinux零知识学习四、Audit应用层源码下载、编译和安装
接前一篇文章:SELinux零知识学习三.SELinux应用层源码下载.编译和安装 在前篇文章中编译SELinux源码时,出现了如下错误: seusers_local.c:11:10: 致命错误:li ...
- Android 4.0.1 源码下载,编译和运行
[牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...
- Centos7下RTL8188eu USB无线网卡(TP WN725N) 驱动源码下载和编译步骤
Centos7下RTL8188eu USB无线网卡TP WN725N 驱动源码下载和编译步骤 一 准备编译环境 二 下载源代码 三 编译和安装 四 启用8188euko Centos7下RTL8188 ...
最新文章
- 华为发布岳云鹏手机_华为P40系列发布,再谈手机隐私安全重要性
- (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
- sql 数据分组统计与合计
- 增强for中操作集合元素的误区---java.util.ConcurrentModificationException
- 南京航空航天大学计算机考研经验分享,南京航空航天大学计算机考研829大纲
- 数据结构/图论:最小路径问题
- mysql transaction-isolation_MySQL数据库事务隔离级别(Transaction Isolation Level)
- Mysql调优大全梳理(涵盖90%需要调优的场景)
- JavaWeb中的表单提交和超链接请求传递参数
- CPU T9500-p9500-T9400-T9300-p8700各种小黑主流处理器对比分析
- 魔众视频管理系统 v3.4.0 常规优化 系统界面升级
- FATAL: License file expired:金仓数据库过期了...
- html自定义图例,自定义 highcharts 图例之 symbol
- python基础程序设计与面向对象程序设计_python基础——面向对象的程序设计
- Android隐藏虚拟按键
- 怎样制作gif格式动图?如何在线自制gif动图?
- python 的下载安装
- Using Memory Efficiently(Pro Android Apps Performance Optimization)
- AI作画的业界天花板被我找到了,AIGC模型揭秘 | 昆仑万维
- Ubuntu卸载python3.6