1. 程式人生 > >SQLite第三課 源碼編譯錯誤以及解決

SQLite第三課 源碼編譯錯誤以及解決

sqlite sqlite_core

1fts2 has a designflaw and has been deprecated

2fts1 has a designflaw and has been deprecated

解決方案:

解析:FTS1FTS2都有設計的缺陷,現在已經被廢棄,目前已經提供了FTS3或者FTS4,這些作為全文搜索的模塊,彌補了以前的FTS1的不足。如果確定不會使用到全文搜索,可以直接使用SQLITE_CORE,禁用。將SQLITE_CORE添加到編譯選項。

VS 的基本設置:屬性》》C/C++》》預處理器》》預處理定義

3Cannot open includefile: ‘unicode/utypes.h‘: No such file or directory

該問題主要是調用了FTS1或者FTS2引起的,通過禁用FTS1FTS2順利編譯通過。

FTS1有一個設計的缺陷,會導致數據庫錯誤(databasecorruption.強烈推薦廢棄該模塊,改用fts3或者更高的模塊。如果你相信fts1的使用是安全的,可以通過添加DSQLITE_ENABLE_BROKEN_FTS1=1到編譯選項。

FTS1模塊將會作為一個擴展模塊而被編譯(當SQLITE_CORE沒有被定義的情況下)。

另外如果SQLITE_ENABLE_FTS1被定義,FTS1也會被編譯進SQLite內核。

4Error: no module:rtree

默認情況下sqlite3.exe的控制臺程序是沒有攜帶

Rtree模塊的,如果需要啟用該模塊,需要調用預編譯定義:SQLITE_ENABLE_RTREE,然後通過shell.c文件的main重新生成程序。

5)控制臺程序

建立空的控制臺,然後導入sqlite源碼,編譯出現如下的錯誤:

error LNK2019: 無法解析的外部符號[email protected],該符號在函數 ___tmainCR...

第一步:在C++/預編譯中,添加:SQLITE_ENABLE_RTREE 參數支持rtree

第二步:如果是控制臺程序:

1.菜單中選擇Project->Properties, 彈出Property Pages窗口

2.在左邊欄中依次選擇:

ConfigurationProperties->C/C++->Preprocessor,然後在右邊欄的PreprocessorDefinitions對應的項中刪除_WINDOWS, 添加_CONSOLE.

3.在左邊欄中依次選擇:ConfigurationProperties->Linker->System,然後在右邊欄的SubSystem對應的項改為CONSOLE(/SUBSYSTEM:CONSOLE)

6unexpected end offile while looking for precompiled header. Did you forget to add ‘#include"stdafx.h"‘ to your source?

sqlite源碼不能夠調用預編譯處理,因為sqlite的源碼是純C語言,無法獲得VC++預編譯的好處。

解決:屬性》》C/C++》》預編譯頭》》創建、使用預編譯頭(不使用預編譯頭)


SQLite第三課 源碼編譯錯誤以及解決