概述

“最新版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源码下载与编译相关推荐

  1. VLC for Android源码下载和编译

    Project Hosting on 点击打开链接 最受欢迎的开源项目 点击打开链接 由Android的核心开发团队提供了15个优秀的示例项 目,包含了游戏.图像处理.时间显示.开始菜单快捷方式等. ...

  2. ros源码下载及编译

    Ros1 源码下载及编译 准备工作 Setup your sources.list Setup your computer to accept software from packages.ros.o ...

  3. WebRTC源码下载与编译

    WebRTC源码编译 1 几种源码下载方案对比 1.1 拉别人下好的代码 1.2云服务器 1.3 国内镜像 1.4 挂代理(推荐) 2 源码编译环境准备 2.1 环境要求 2.2 代理服务器配置 2. ...

  4. Android12 源码下载、编译、刷机、单编调试Framework

    文章目录 说明 1. 代码下载 1.1 下载Repo工具 1.2 安装和配置Git 1.3 创建工程目录 1.4 初始化Repo仓库 1.5 同步代码 2. 驱动下载 2.1 下载对应机型的驱动 2. ...

  5. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:http://item.jd.com/12212640.html 试读地址:http:/ ...

  6. 《深入理解Android内核设计思想(第2版)(上下册)》之Android源码下载及编译...

    本文摘自人民邮电出版社异步社区<深入理解Android内核设计思想(第2版)(上下册)> 购书地址:item.jd.com/12212640.ht- 试读地址:www.epubit.com ...

  7. SELinux零知识学习四、Audit应用层源码下载、编译和安装

    接前一篇文章:SELinux零知识学习三.SELinux应用层源码下载.编译和安装 在前篇文章中编译SELinux源码时,出现了如下错误: seusers_local.c:11:10: 致命错误:li ...

  8. Android 4.0.1 源码下载,编译和运行

    [牛人分享]Android 4.0.1 源码下载,编译和运行 转自 http://blog.csdn.net/rambo2188/article/details/6943382 ----------- ...

  9. Centos7下RTL8188eu USB无线网卡(TP WN725N) 驱动源码下载和编译步骤

    Centos7下RTL8188eu USB无线网卡TP WN725N 驱动源码下载和编译步骤 一 准备编译环境 二 下载源代码 三 编译和安装 四 启用8188euko Centos7下RTL8188 ...

最新文章

  1. 华为发布岳云鹏手机_华为P40系列发布,再谈手机隐私安全重要性
  2. (转)一步一步Asp.Net MVC系列_权限管理设计起始篇
  3. sql 数据分组统计与合计
  4. 增强for中操作集合元素的误区---java.util.ConcurrentModificationException
  5. 南京航空航天大学计算机考研经验分享,南京航空航天大学计算机考研829大纲
  6. 数据结构/图论:最小路径问题
  7. mysql transaction-isolation_MySQL数据库事务隔离级别(Transaction Isolation Level)
  8. Mysql调优大全梳理(涵盖90%需要调优的场景)
  9. JavaWeb中的表单提交和超链接请求传递参数
  10. CPU T9500-p9500-T9400-T9300-p8700各种小黑主流处理器对比分析
  11. 魔众视频管理系统 v3.4.0 常规优化 系统界面升级
  12. FATAL: License file expired:金仓数据库过期了...
  13. html自定义图例,自定义 highcharts 图例之 symbol
  14. python基础程序设计与面向对象程序设计_python基础——面向对象的程序设计
  15. Android隐藏虚拟按键
  16. 怎样制作gif格式动图?如何在线自制gif动图?
  17. python 的下载安装
  18. Using Memory Efficiently(Pro Android Apps Performance Optimization)
  19. AI作画的业界天花板被我找到了,AIGC模型揭秘 | 昆仑万维
  20. Ubuntu卸载python3.6

热门文章

  1. 智慧水务系统建设方案(污水处理、智慧防汛、智慧水务、智慧水利)
  2. Vue使用dayjs时间插件
  3. SVN客户端简单的使用
  4. 大牌网站都在用的字体,专治选择困难症!|附字体
  5. cas入门之十九:https形式发布cas证书制作
  6. 十二星座匹配对象_12星座的最佳配对对象
  7. 如何用MindManager制作一个sop流程
  8. 移动测试Appium安装
  9. Xposed框架90版本已安装,但尚未激活。
  10. 基于信赖域的动态径向基函数代理模型优化策略