1. 程式人生 > >sqlite3在windows平臺下編譯

sqlite3在windows平臺下編譯

首先,sqlite 官方已經有預編譯好的DLL下載,如果你不需要特別優化的版本,直接下載官網上的DLL即可。你可以在下載 頁面的 “Precompiled
Binaries For Windows”
可以找到。

不過你想編譯出自己的版本,比如新增優化引數後編譯,debug版,或進行一些定製(例如官網這裡
有一些預編譯巨集,允許你定製自己的sqlite),那麼你就需要自己編譯了。

  首先在下載原始碼,在頁面的第一行就是,如
sqlite-amalgamation-3_7_3.zip
,得到sqlite3.def、sqlite3.c、sqlite3.h以及sqlite3ext.h,一般下拉到 “Precompiled Binaries For
Windows” 就可以看到,例如 sqlitedll-3_7_3.zip 有多種不同版本的,這裡 就不多說了。

然後解壓sqlite-amalgamation-3_7_3.zip 到資料夾 sqlite3\,會得到 sqlite3.c,sqlite3.h,sqlite3ext.h 三個檔案,

解壓 sqlitedll-3_6_12.zip ,把 sqlite3.def 移動到 sqlite3\ 下面。

下面就是新建一個工程

1.開啟VC新建一個“Win32 Dynamic-Link
Library”工程,命名為:sqlite3;

2.在接下來的對話方塊中選擇"An empty DLL project",點
FINISH->OK;

3.將得到的檔案複製到工程資料夾下

4.在工程的Source
Files中新增sqlite3.c檔案;

5.在工程的Include
Files中新增sqlite3.h檔案;

6.在工程的Resource
Files中新增sqlite3.def檔案;

這樣你可以先編譯一下,發現有一下連結錯誤:

比如有以下問題

sqlite3.def
: error LNK2001: unresolved external symbol
sqlite3_column_database_name

sqlite3.def : error LNK2001: unresolved
external symbol sqlite3_column_database_name16

sqlite3.def : error
LNK2001: unresolved external symbol
sqlite3_column_origin_name

sqlite3.def : error LNK2001: unresolved
external symbol sqlite3_column_origin_name16

sqlite3.def : error LNK2001:
unresolved external symbol sqlite3_column_table_name

sqlite3.def : error
LNK2001: unresolved external symbol
sqlite3_column_table_name16

sqlite3.def : error LNK2001: unresolved
external symbol sqlite3_table_column_metadata

sqlite3.def : error
LNK2001: unresolved external symbol
sqlite3_rtree_geometry_callback

Debug/sqlite3.lib : fatal error LNK1120:
1 unresolved externals

LINK : fatal error LNK1141: failure during build
of exports
file

在選單【Project】-【Settings…】-【C/C++】標籤下的Category【General】下Preprocessor
definitions下:

新增2個編譯選項,分別是:

SQLITE_ENABLE_RTREE

SQLITE_ENABLE_COLUMN_METADATA

最後,再編譯就會成功,dll檔案和lib檔案都會有了。

注意:網上有一些說明如何在Windows下編譯SQLite的文章,但都有問題,當然這個問題是指SQLite的版本不同,其中新版本中需要多加一個編譯選項就是文章中做下劃線標誌

這裡有個在vs下編譯的文章
http://www.cublog.cn/u/24020/showart_2194558.html