SQLite3源碼在Windows及WinCE平台下的編譯方法


好久沒有寫博客了,最近有時間又開始寫點東西。

最近,剛好需要用到SQLite3數據庫,就自己研究了一下,這個的確是個好東西,開源的東西都還不錯。

好了,言歸正傳。相信不少人在用SQLite3源碼編譯的時候還是費了不少勁的,網上找來的東西都講的不是很完整。

下面,我就將自己的編譯方法寫了出來。

首先從SQLite官方網站http://www.sqlite.org/download.html 下載最新的源代碼,目前最新的版本是V3.7.11(2012年3月25日星期日)。

需要下載在源碼如下:

sqlite-amalgamation-3071100.zip,sqlite-dll-win32-x86-3071100.zip,sqlite-src-3071100.zip,sqlite-preprocessed-3071100.zip。

 

1、  編譯成Win32下的應用程序(*.exe),用於命令行模式下的調試。

(1)創建一個Win32 Console Application空的工程,工程名為“sqlite”;

 

(2)將sqlite-amalgamation-3071100.zip 解壓后的shell.c、sqlite3.c、sqlite3.h、sqlite3ext.h添加到工程中,直接編譯即可生成sqlite.exe,可以在命令提示符下進行測試。

 

 

2、編譯生成Win32平台下的動態鏈接庫(*.dll)。

(1)創建一個Win32 Project,選擇一個空的Dll工程,工程名為“sqlite_win32_dll”;

 

(2)將sqlite-amalgamation-3071100.zip解壓后的sqlite3.c、sqlite3.h、sqlite3ext.h,將sqlite-dll-win32-x86-3071100.zip解壓后的sqlite3.def模塊定義文件一起添加到工程中,在Preprocessor中加入SQLITE_ENABLE_COLUMN_METADATA,編譯通過即可生成dll,但此時只生成了sqlite_win32_dll.dll文件,沒有生成對應的引入庫(sqlite_win32_dll.lib)文件,具體方法是如下:

修改sqlite3.c文件中的SQLITE_API宏定義(當前版本在sqlite3.c的第26行),將

# define SQLITE_API修改成

# define SQLITE_API __declspec(dllexport)

重新編譯即可生成sqlite_win32_dll.dll和sqlite_win32_dll.lib。

或者直接把sqlite3.def添加在Linker--->Input--->Module Definition File中也可以搞定(推薦)。

 

 

 

 

 

3、  編譯生成WinCE平台下的動態鏈接庫(*.dll)。

(1)創建一個Smart Device設備工程,選擇相應的SDK后,選擇一個空的Dll工程,工程名為“sqlite_wince”;

 

(2)將sqlite-src-3071100.zip解壓后src目錄下的所有代碼(除test*.*, tclsqlite.c,lempar.c,shell.c外),都拷貝到工程目錄下,將ext\rtree目錄下rtree.c,rtree.h,sqlite3rtree.h添加至工程目錄,sqlite-dll-win32-x86-3071100.zip解壓后的sqlite3.def模塊定義文件一起添加到工程中,將sqlite-preprocessed-3071100.zip解壓后的keywordhash.h,opcodes.c,opcodes.h,parse.c,parse.h,sqlite3.h都添加到工程目錄下;

(3)在工程屬性的C/C++——>Advanced——>Compile As中選擇TC,在C/C++--->Preprocessor中加入SQLITE_ENABLE_COLUMN_METADATA,編譯;

(4)此時,會報連接錯誤

1>os_win.obj : error LNK2019: unresolved external symbol osUnlockFileEx referenced in function winShmSystemLock

1>date.obj : error LNK2019: unresolved external symbol localtime_s referenced in function osLocaltime

對於第一個鏈接錯誤,在google搜索關鍵詞“UnlockFileEx winShmSystemLock”后,在官網http://www.sqlite.org/src/info/13ed106c8c279422 給出了解釋,對比代碼后知道,將osUnlockFileEx改成UnlockFileEx即可,當前版本位於(os_win.c第2373行);

 

對於第二個鏈接錯誤把文件date.c中的localtime_s替換成_localtime64_s,重新編譯即可。

 

(5)此時只生成了sqlite_wince.dll文件,沒有生成對應的引入庫(sqlite_wince.lib)文件,具體方法是如下:

修改sqlite3.h文件中的SQLITE_API宏定義(當前版本在sqlite3.h的第53行),將

# define SQLITE_API修改成

# define SQLITE_API __declspec(dllexport)

重新編譯即可生成sqlite_win32_dll.dll和sqlite_win32_dll.lib。

 

或者直接把sqlite3.def添加在Linker--->Input--->Module Definition File中也可以搞定(推薦)。

 

注意:如果需要將sqlite3.h頭文件提供給其他人使用,編譯完后再把宏定義改回原來的。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM