在Visual Studio 下編譯 sqlite3

來源:互聯網
上載者:User

首先,sqlite 官方已經有先行編譯好的DLL下載,如果你不需要特別最佳化的版本,直接下載官網上的DLL即可。你可以在下載 頁面的 “Precompiled Binaries For Windows” 可以找到。
不過你想編譯出自己的版本,比如添加最佳化參數後編譯,debug版,或進行一些定製(例如官網這裡 有一些先行編譯宏,允許你定製自己的sqlite),那麼你就需要自己編譯了。

首先在下載原始碼,在頁面的第一行就是,如 sqlite-amalgamation-3_6_12.zip ,接著下載編譯好的DLL,我們主要是需要這裡面的一個 sqlite3.def 檔案,因為原始碼裡沒有。一般下拉到  “Precompiled Binaries For Windows”  就可以看到,例如 sqlitedll-3_6_12.zip 。有了這兩個壓縮包就可以了。

首 先解壓 sqlite-amalgamation-3_6_12.zip 到檔案夾 sqlite3/,會得到 
sqlite3.c,sqlite3.h,sqlite3ext.h 三個檔案,然後解壓 sqlitedll-3_6_12.zip ,把
sqlite3.def 移動到 sqlite3/ 下面。

開啟 visual studio,建立一個空的dll工程,工程名為sqlite3,這樣是為了能直接產生名為sqlite3.dll 的dll。然後sqlite3/  下的4個檔案檔案夾移動到此工程目錄下,即與 sqlite3.vcproj 在同一級。
將 sqlite3.c 添加到工程,具體做法是右擊“源檔案”,選擇“添加->現有項”,瀏覽到sqlite3.c即可。如所示。

然後將sqlite3.def 添加到工程,然後輸入給連接器。具體做法是右擊工程sqlite3,選擇“屬性”,在彈出的對話方塊中選擇“連接器->輸入”,在“模組定義檔案”中輸入sqlite3.def,如所示。

好,可以開始編譯了,右擊sqlite3,選擇“產生”,結果連結出錯,

—— 已啟動產生: 項目: sqlite3, 配置: Release Win32 ——
正在編譯…
sqlite3.c
正在連結…
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_column_database_name
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_column_database_name16
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_column_origin_name
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_column_origin_name16
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_column_table_name
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_column_table_name16
sqlite3.def : error LNK2001: 無法解析的外部符號 sqlite3_table_column_metadata

看來sqlite3.def 中定義的這幾個匯出函數找不到定義,什麼原因呢,經過一番google,找到這篇文章 ,需要增加一個預定義宏 SQLITE_ENABLE_COLUMN_METADATA,這個宏是什麼意思呢,到官網 去查一下,

SQLITE_ENABLE_COLUMN_METADATA



When this C-preprocessor macro is defined, SQLite includes some
additional APIs that provide convenient access to meta-data about
tables and queries. The APIs that are enabled by this option are:

* sqlite3_column_database_name()
* sqlite3_column_database_name16()
* sqlite3_column_table_name()
* sqlite3_column_table_name16()
* sqlite3_column_origin_name()
* sqlite3_column_origin_name16()
* sqlite3_table_column_metadata()

原來是只有當啟用了這個宏後,c代碼中才會後這幾個函數的定義,OK,在前置處理器中添加 SQLITE_ENABLE_COLUMN_METADATA,如所示。

再來編譯,搞定!

 

查看原文

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.