亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.430618.com 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

概述

“最新版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服務”之宗旨落到實處!

分享到:
標簽:SQLite
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定