標籤:sqlite 動態庫
下載源碼包兩個:
sqlite-dll-win32-x86-3081101.zip,裡面提供了匯出sqlite3的函數的檔案sqlite3.def
主要用於產生LIB檔案,確定連結使用
sqlite-preprocessed-3081101.zip,提供了源碼檔案,但是刪除shell.c和tclsqlite3.c檔案
1.建立win32控制台程式,名稱sqlite3
2.選擇產生DLL
3.解壓壓縮包,將sqlite-preprocessed-3081101的檔案複製到工程檔案夾下(除了shell.c以及tclsqlite.c)。
4.通過添加存在檔案,將源碼添加到編譯項目中
5設定模組定義檔案sqlite3.def,否則產生的dll沒有對應的lib
7.添加預定義選項SQLITE_CORE,SQLITE_ENABLE_COLUMN_METADATA、SQLITE_ENABLE_RTREE,這是sqlite3的宏定義。
8.按F7產生相應的dll和lib。
編譯小細節:
指定函數的匯出檔案:sqlite3.defs
屬性》》連結器》》輸入》》模組定義檔案(sqlite3.def),請注意這種情況下,sqlite3.def檔案和編譯環境平級。
後果:不會產生sqlite3.lib檔案
指定先行編譯宏:
屬性》》C/C++》》前置處理器》》預先處理定義》》
SQLITE_CORE
SQLITE_ENABLE_COLUMN_METADATA
SQLITE_ENABLE_RTREE
後果:
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_rtree_geometry_callback
1>sqlite3.def :error LNK2001: 無法解析的外部符號sqlite3_rtree_query_callback
前面6個函數,必須定義了SQLITE_ENABLE_COLUMN_METADATA才能夠將函數匯出,一般情況下,這些函數,我們可以直接在sqlite3.def檔案中刪除,不匯出
後面2個函數,必須定義了SQLITE_ENABLE_RTREE才能夠將函數匯出,如果我們不適用R樹的空間搜尋功能,這些函數,我們可以直接在sqlite3.def檔案中刪除,不匯出
SQLite第四課 建立windows動態庫