1. 程式人生 > >VS配置、編譯sqlite失敗的解決方法

VS配置、編譯sqlite失敗的解決方法

       在VS上有需要使用到資料庫,選擇的資料庫是輕量級的資料庫—sqlite。這個資料庫的特點就是呼叫方便,且支援視覺化工具進行資料庫的編輯。但是,在VS2012上對sqlite進行配置的時候,一直無法除錯成功。
       一般來說,我們需要下載sqlite的原始碼和對應的工具包以及dll包。由於下載的dll包中沒有lib庫,所以在程式中如果要是用lib庫的話,需要我們自己動手編譯。編譯的話,網上提供的方法總共有2中。一種是通過cmd命令呼叫vs的lib.exe進行生成,第二種方法則是通過VS引入原始碼進行編譯生成。我們這裡主要講第一種方式。
      Cmd生成lib的流程主要如下:
     1.
進入D:\Microsoft Visual Studio 11.0\VC\bin目錄下,拷貝lib.exe,link.exe以及mspdb110.dll(VS對應的是mspdb140.dll)到sqlite的目錄中。
     2. Sqlite目錄中需要有sqlite的sqlite3.h,sqlite3.def,sqlite3.dll。
     3. 通過cmd命令進入sqlite目錄中,通過命令LIB /MACHINE:IX86 /DEF:sqlite3.def生成lib靜態庫檔案。這裡針對64位的pc命令會有所不同。如果是64位的系統的話,命令應該改為:LIB /MACHINE:X64 /DEF:sqlite3.def.
      值得一提的是,上述兩種方法編譯過程中,都需要針對你所用的pc位數進行匹配,即32位需要使用32位的庫。64位則使用64位的庫,這個如果弄錯了,則無法生成lib庫。我的pc上使用的是64位的作業系統。

當生成了lib之後,我們可以建立一個sqliteDemo的工程進行驗證。如同其他動態連結庫的呼叫方式一樣,我們添加了sqlite的連結庫。測試程式碼如下:


#include<stdio.h>
#include<iostream>
#include"sqlite3.h"
usingnamespacestd;
/*****************************************
* 用作資料庫測試的demo
*****************************************/
intmain()
{
sqlite3*tempDB;
sqlite3_open("test.db",&tempDB);
return1;
}
如果直接執行的話,可能會報下面兩種錯誤介面。
 
或者是 


產生這種錯誤的原因主要是,我們vs預設生成的程式是Win32的,而這對應的lib已經是64位的,所以會有這種錯誤。
解決方法如下:
 
在VS的配置管理器中,選擇x64平臺,重新進行編譯,就能解決該問題了。