導航:首頁 > 源碼編譯 > vs編譯sqlite

vs編譯sqlite

發布時間:2022-03-31 23:00:20

⑴ vs2013 調用sqlite

1,去sqlite官網上下載最近的sqlite源碼包,解壓後得到四個文件:shell.c,sqlite3.c,sqlite3.h,sqlite3ext.h
此處還需要sqlite3.def文件,它在sqlite官方生成的dll包中,下載下來,解壓即可。
其中,shell.c文件是做來生成exe可執行文件用的。
2,打開vs2008 新建sqlite3的非mfc的DLL項目,這里只需要建立空的項目即可。
3,將上面非shell.c的四個文件復制動sqlite3項目工程的目錄下

4,將sqlite3.h,sqlite3ext.h兩文件添加到項目的頭文件下面,把sqlite3.c,sqlite3.def添加到項目的源文件下面。
5,編譯即可以得來sqlite3.dll文件

⑵ 如何編譯SQLite-How To Compile SQLite

SQLite是ANSI-C的源代碼。在使用之前必須要編譯成機器碼。這篇文章是用於各種編譯SQLite方法的指南。

這篇文章不包含編譯SQLite的每個步驟的反饋,那樣可能會困難因為每種開發場景都不同。所以這篇文章描述和闡述了編譯Sqlite的原則。典型的編譯命令已經作為例子提供了,以期望應用開發者能夠使用這些例子作為完成他們自己定製的編譯過程的的一個指南。換句話說,這篇文章提供了想法和見解,而不是交鑰匙的解決方法。

融合VS單獨源文件

Sqlite是由超過一百個c源碼文件以及眾多的目錄下的腳本構建的。Sqlite的實現是純粹的ANSI-C,但是許多C語言源代碼文件是由輔助的C程序生成或者轉換來的,並且AWK,SED和TCL腳本會融合到完成的sqlite庫中。對Sqlite構建需要的C程序和轉換和創建C語言源碼是一個復雜的過程。

為了簡化這些,sqlite也通過一個預打包的合並後的源碼文件:sqlite3.c。這個合並文件是一個ANSI-C源碼實現整個SQLite庫的唯一文件。合並後的文件更容易處理。所有的東西都包含在這一個文件里,所以很容易進入一個更大的C或者C++程序的源碼樹。所有的代碼生成和轉換步驟都已經實現了,因此沒有輔助的C程序需要去配置和變異,也沒有腳本需要去運行。並且,因此所有哭都包含在一個翻譯單元,編譯器可以做更多高級的優化從而提升5%到10%的性能。因為這些原因,融合後的源碼文件sqlite3.c對所有程序來講都是值得推薦的。

推薦所有的應用程序使用融合文件。

直接從單獨的源碼文件中構建sqlite當然可以,但是並不推薦。對一些特殊的應用程序,可能需要修改構建程序去處理使用那些從網站上下載的預構建的源碼文件不能完成的情況。對於這些情況,推薦構建和使用一個定製過的合並文件。換句話說,即使一個工程需要以單獨的源碼文件構建sqlite,仍然推薦使用一個融合後的源碼文件作為一個中間步驟。

編譯命令行介面(CLI)

構建命令行介面需要三個源碼文件:

sqlite3.c:Sqlite融合的源碼文件

sqlite3.h:匹配sqlite3.c以及定義sqlite的c語言介面的頭文件

shell.c:命令行介面程序本身。這個c源碼文件包含一個main()的常式和每輪循環的用戶輸入的提示符並將輸入傳給sqlite資料庫引擎用於處理。

所有的上述源碼的三個文件都被包含在下載頁面的amalgamation tarball中。

為了構建CLI,簡單的將這三個文件放置在相同的目錄下然後一起編譯他們。用MSVC:
cl shell.c sqlite3.c -Fesqlite3.exe

在unix系統上(或者在windows上用cygwin或者mingw+msys)典型的命令會有些像這樣:
gcc shell.c sqlite3.c -lpthread -ldl

為了SQLite線程安全,需要pthreads庫。但是因為CLI是一個單線程的,我們可以指示SQLite構建一個非線程安全的庫並因此護綠pthreads庫:
gcc -DSQLITE_THREADSAFE=0 shell.c sqlite3.c -ldl

-ldl庫是在支持動態裝載時需要,例如sqlite3_load_extension() 介面和load_extension()
SQL function。如果這些特性都不要求,那麼我們也可以使用SQLITE_OMIT_LOAD_EXTENSION編譯時間選項忽略他們。
gcc -DSQLITE_THREADSAFE=0 -DSQLITE_OMIT_LOAD_EXTENSION shell.c sqlite3.c

有人可能想要提供其他的編譯時間選項(compile-time options),例如SQLITE_ENABLE_FTS3去全文本搜索或者SQLITE_ENABLE_RTREE用於R*樹搜索引擎擴展。而有人將正常指定一些編譯優化開關。(預編譯的CLI可以從選擇sqlite網站上使用「-Os」下載下來)有無數種可能的變數在這里。

關鍵點在這里:構建CLI需要編譯一起兩個C語言文件。shell.c文件包含入口的定義和用戶輸入的loop,而sqlite融合文件sqlite3.c包含完整的sqlite庫的實現。

編譯TCL介面

sqlite的tcl介面是一個小的模塊被添加到一般的融合文件中。結果是一個新的融合後的源碼文件,稱之為「tclsqlite3.c」。這個源碼文件是生成一個可以使用TCL

load命令去載入到一個標準的tclsh或者wish中,或者隨著sqlite構建成功生成一個單獨唯一的tclsh的共享庫所需要的。一個tcl的融合的副本被包含在下載頁的TEA
tarball中作為一個文件。

為了生成一個linux上的sqlite的TCL-loadable庫,下面的命令需要滿足:
gcc -o libtclsqlite3.so -shared tclsqlite3.c -lpthread -ldl -ltcl

不幸的是構建Mac OS X 和 Windows的共享庫並不是如此簡單。對於這些平台最好使用包含在TEA tarball中的configure腳本和makefile.

為了生成一個單獨的tclsh,可以用於sqlite靜態鏈接,使用如下的編譯器調用:
gcc -DTCLSH=1 tclsqlite3.c -ltcl -lpthread -ldl -lz -lm

這里的技巧是-DTCLSH=1選項。sqlite的TCL介面模塊包含一個main的過程,用於初始化一個TCL解釋器並在以-DTCLSH=1編譯後進入到一個命令行loop。上述命令可以工作在Linux和Mac
OS X,雖然有時可能需要依賴於平台調整庫選項以及編譯的TCL的哪一個版本。

構建融合文件

下載頁提供的sqlite融合文件的版本對大多數用戶來說是足夠的。然而,一些工程可能想要或者需要構建他們自己的融合文件。一個常見的構建一個定製的融合文件的理由是為了使用特定的compile-time options來定製sqlite庫。回想sqlite融合文件中包含了許多C代碼由輔助程序和腳本生成。許多的編譯時間選項影響這一成聖代碼而且必須在融合文件組裝前提供給代碼生成器。這一系列必須傳給代碼生成器的編譯時間相關的選項會使得sqlite的發布版本各不相同,但是在寫這邊文章的時候,代碼生成器需要知道的這組選項包括:

SQLITE_ENABLE_UPDATE_DELETE_LIMIT
SQLITE_OMIT_ALTERTABLE
SQLITE_OMIT_ANALYZE
SQLITE_OMIT_ATTACH
SQLITE_OMIT_AUTOINCREMENT
SQLITE_OMIT_CAST
SQLITE_OMIT_COMPOUND_SELECT
SQLITE_OMIT_EXPLAIN
SQLITE_OMIT_FOREIGN_KEY
SQLITE_OMIT_PRAGMA
SQLITE_OMIT_REINDEX
SQLITE_OMIT_SUBQUERY
SQLITE_OMIT_TEMPDB
SQLITE_OMIT_TRIGGER
SQLITE_OMIT_VACUUM
SQLITE_OMIT_VIEW
SQLITE_OMIT_VIRTUALTABLE

為了構建一個定製的融合文件,先下載原始的獨立源碼文件到一個unix或者類unix開發平台。確定獲取的原始源碼文件不是「預編譯過的源文件」。任何人都可以通過到下載頁或者直接從configuration management system.獲取完整的一套原始源碼文件。

假設sqlite源碼樹被存在一個名為「sqlite」的目錄下。計劃構建一個平行目錄下的名為「bld」的融合文件。首先通過運行sqlite源碼樹種的configure腳本運行或者通過製作一份源碼樹頂層的的makfile模板的一份,來構建一個合適的makefile.然後手動編輯這個Makfile去包含需要的編譯時間相關的選項。最終運行:
make sqlite3.c

在windows上使用MSVC:
nmake /f Makefile.msc sqlite3.c

sqlite3.c的make
target會自動構造一般的「sqlite3.c」合並的源碼文件,以及它的頭文件「sqlite3.h」,和包含TCL介面的融合源碼文件「tclsqlite3.c」。之後,需要的文件可以被拷貝到文件目錄下然後根據上述勾勒的過程編譯。

構建一個windows的動態鏈接庫DLL

為了在windows構建一個sqlite的dll使用,首先獲取對應的融合過的源碼文件,sqlit3.c和sqlite.h。這些可以從SQLite website上下載或者和上述告知的一樣去定製生成。

使用工作目錄下的源碼文件,一個dll可以在msvc中使用如下命令生成:
cl sqlite3.c -link -dll -out:sqlite3.dll

上述命令需要運行在msvc的MSVC Native Tools Command
Prompt.如何你已經在機器上安裝了msvc,你可能有多個版本的這種命令提示符,針對於x86和x64的自帶構建的,或者交叉編譯到ARM的。依賴要求的DLL去使用對應合適的命令提示符工具。

如果使用MinGW編譯器,命令是這樣的:
gcc -shared sqlite3.c -o sqlite3.dll

注意MinGW只生成32位的dll。另有一個分開的MinGW64工程可以用來生成64位的dll。可以推斷其命令行語法是類似的。需要注意的是最近的MSVC的版本生成的DLLs可能不能工作到WinXP或者更早版本的windows上。因此為了最大限度的兼容你的生成的dll,推薦MinGW。一個好的經驗法則是使用MinGW去生成32位的dlls,使用msvc去生成64位的dlls。

⑶ 在VS中用sqlite作為資料庫設計窗體應用,一定要用到sqlite3嗎,sqlite3到底用來干什麼的

不一定,sqlite是單機資料庫,簡單、易用。
如果你的程序不需要存儲數據,可以不用sqlite
也可以用其他資料庫替換sqlite
祝好運,望採納

⑷ 如何在Windows下編譯SQLite3

1.先從官網獲取sqlite-amalgamation-3_6_22.zip;
2.接著從官網獲取sqlitedll-3_6_22.zip

下載編譯好的DLL,這里有我們需要的sqlite3.def該文件
3.打開VC新建一個「Win32 Dynamic-Link Library」工程,命名為:sqlite3;
4.在接下來的對話框中選擇"An empty DLL project",點 FINISH->OK;
5.將sqlite-amalgamation-3_6_22文件夾下的sqlite3.h以及sqlite3.c兩個文件復制到工程文件夾下;
將sqlitedll-3_6_22文件夾下的sqlite3.def該文件復制到工程文件夾下;
6.在工程的Source Files中添加sqlite3.c文件;
7.在工程的Include Files中添加sqlite3.h文件;
8.在工程的Resource Files中添加sqlite3.def文件;
9.針對如下問題:
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
Debug/sqlite3.lib : fatal error LNK1120: 7 unresolved externals
在菜單【Project】-【Settings…】-【C/C++】標簽下的Category【General】下
Preprocessor definitions下:
新增2個編譯選項,分別是:
THREADSAFE
SQLITE_ENABLE_COLUMN_METADATA
10.往工程中添加sqlite3.def文件就是為生成sqlite3.lib文件;
sqlite3.lib是與sqlite3.dll動態鏈接庫文件一起提供給軟體開發者的;

⑸ 我第一次用vs2013使用sqlite,需要做些什麼准備,,貌似包含sqlite的頭文件都沒有啊。

需要下載連接用的包

⑹ sqlite3在visual studio2010下如何build

先要生成LIB文件,通過VCLIB命令生成LIB文件,然後將動態鏈接庫鏈接上,在project setting中添加sqlite3.lib,加入sqlite3.h .就可以用了。關鍵的是生成LIB文件。給你個鏈接http://hi..com/%B7%E7%D3%EA%C0%CB%CC%EC%D1%C4/blog/item/ff1b018aed7d3b1fc8fc7ae2.html。上面有怎麼在VC下使用sqlite的具體步驟

⑺ vs2010 伺服器資源管理怎麼連接sqlite資料庫

1.安裝.Net SQLite資料庫驅動
2.在伺服器資源管理器中添加資料庫連接
3.點擊更改數據源選擇System.Data.SQLite Database File 數據源
4.確定後點擊new新建一個sqlite資料庫文件 確定後就可以了

⑻ 請教個在VS2013中使用sqlite的簡單問題

sqlite3.dll動態鏈接庫,它允許程序共享執行特殊任務所必需的代碼和其他資源。
動態的sqlite3.lib相當於一個h文件,是對實現部分(.dll文件)的導出部分的聲明。編譯後只是將導出聲明部分編譯到宿主程序中,其生成的sqlite3.exe在運行時需要相應的dll文件支持 。
靜態的sqlite3.lib將導出聲明和實現都放在lib中。編譯後所有代碼都嵌入到宿主程序,其生成的sqlite3.exe可直接運行。

任務:
一.使用VS2010編譯sqlite3,生成動態的sqlite3.lib和sqlite3.dll(sqlite3.dll在官網中也可下載到)。在VS2010中編寫簡單程序,使用動態的sqlite3.lib和sqlite3.dll。
二.使用VS2010編譯sqlite3,生成靜態的sqlite3.lib。在VS2010中編寫簡單程序,使用靜態的sqlite3.lib。

⑼ VS2010怎麼引用SQLite

sqlite3.dll動態鏈接庫,它允許程序共享執行特殊任務所必需的代碼和其他資源。
動態的sqlite3.lib相當於一個h文件,是對實現部分(.dll文件)的導出部分的聲明。編譯後只是將導出聲明部分編譯到宿主程序中,其生成的sqlite3.exe在運行時需要相應的dll文件支持 。
靜態的sqlite3.lib將導出聲明和實現都放在lib中。編譯後所有代碼都嵌入到宿主程序,其生成的sqlite3.exe可直接運行。

任務:
一.使用VS2010編譯sqlite3,生成動態的sqlite3.lib和sqlite3.dll(sqlite3.dll在官網中也可下載到)。在VS2010中編寫簡單程序,使用動態的sqlite3.lib和sqlite3.dll。
二.使用VS2010編譯sqlite3,生成靜態的sqlite3.lib。在VS2010中編寫簡單程序,使用靜態的sqlite3.lib。

任務一:
1.在sqlite官網下載sqlite-amalgamation-3071000.zip 和sqlite-dll-win32-x86-3071000.zip(我用的此版本)。
2.分別解壓上述兩個文件到各自文件夾下(sqlite3.def、sqlite3.dll在同一文件夾sqlite-dll下)。
3.從VS2010的安裝目錄下Microsoft Visual Studio 10.0\VC\bin找到lib.exe和link.exe,從VS2010的安裝目錄下G:\Microsoft Visual Studio 10.0\Common7\IDE找到mspdb100.dll。將lib.exe link.exe mspdb100.dll放到步驟2中的sqlite-dll文件夾下。
4.打開cmd窗口,轉到上述sqlite-dll文件夾下,我的是E:\SoftwareDesign\SQLite\sqlite-dll

5.輸入命令:LIB /DEF:sqlite3.def /machine:IX86。這時,在sqlite-dll文件夾下會出現sqlite3.lib。(這是動態的sqlite3.lib文件,只有47KB大小。)
6.在VS2010中編寫簡單程序。文件->新建->項目->Win32控制台應用程序,命名為test1 。
7.將test1.cpp中的內容替換為以下代碼:
// test1.cpp : 定義控制台應用程序的入口點。
//
#include "stdafx.h"
#include <stdlib.h>
#include "sqlite3.h"
int _tmain(int argc, _TCHAR* argv[])
{
int rc;
int i, nrows, ncols, tr;
char *errmsg = NULL;
char **results;

sqlite3 *db = NULL;
rc = sqlite3_open("demodb", &db);
if (rc)
{
fprintf(stderr, "can't open db!/n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else
{
printf("db open successfully!/n");
}
sqlite3_get_table(db,"select * from clients;",&results,&nrows,&ncols,&errmsg);
printf("DB has %d rows and %d cols/n/n",nrows,ncols);
tr=(nrows+1)*ncols;
for(i=0;i<tr;++i) //輸出查詢結果
{
printf("results[%d]= %s/n",i,results[i]); //此處可以自己定義輸出格式,
}
sqlite3_free_table(results); //free
sqlite3_close(db);
int a;
scanf("%d",&a);//沒有此行代碼,運行窗口出現後會馬山消失。
return 0;
}
8.將sqlite3.h、sqlite3.lib、sqlite3.dll復制到工程所在文件目錄中。我的是E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test1\test1,如下圖所示:

9.在VS2010中,右鍵test1工程,添加->現有項,在出現的對話框中選擇上一步中的sqlite3.lib。(必須將lib文件再添加到工程中)
10.按F5鍵,運行成功。
PS:這時,到工程所在文件目錄下找到test1.exe(大小為29KB),我的是在E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test1\Debug。如果直接雙擊運行的話,會提示因缺少sqlite3.dll文件而無法運行。這是因為動態的sqlite3.lib只是將聲明部分編譯到test1.exe中,運行時需要dll文件的支持。將sqlite3.dll文件復制到test1.exe同一目錄下,再雙擊運行test1.exe,就會運行成功。

任務二:
1.在VS2010中,文件->新建->項目->Win32項目,命名為sqlite3(其他名稱也行)。在向導設置中,選擇DLL(D)、空項目。
2.將下載的sqlite-amalgamation-3071000.zip 中的「sqlite3.h」、「sqlite3.c」、「sqlite3ext.h」三個文件添加到工程中,具體做法:右鍵sqlite3工程->添加->現有項,在出現的對話框中選擇上述三個文件。
3.(release版本比debug版本體積小,運行速度快,所以操作中我發布的是release版本)如下圖所示

4.按F7鍵編譯(或右鍵->生成)。在工程所在文件目錄中會編譯出sqlite3.dll文件。(PS:網上有的講解需要配置很多的參數等等,試了很多次都不成功,然而按照上述無需多餘操作即可成功。可能是VS或sqlite版本不同的原因)
5.編譯的同時會在工程所在目錄中產生sqlite3.obj文件,我的是在E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\sqlite3\sqlite3\Release下。接下來要用到VS安裝目錄下的lib.exe文件。將sqlite3.obj文件復制到lib.exe所在目錄下,我的是G:\Microsoft Visual Studio 10.0\VC\bin。將G:\Microsoft Visual Studio 10.0\Common7\IDE下的mspdb100.dll,mspdbcore.dll,mspdbsrv.exe,msobj100.dll復制到lib.exe所在目錄下。
6.打開cmd窗口,轉到lib.exe所在文件夾下,我的是G:\Microsoft Visual Studio 10.0\VC\bin。輸入命令:lib sqlite3.obj。這時會生成靜態的sqlite3.lib(大小為2.32MB)。

7.在VS2010中編寫簡單程序。文件->新建->項目->Win32控制台應用程序,命名為test2 。
8.test2.cpp中的代碼替換為上述的代碼。(任務一步驟7中的代碼)
9.將sqlite3.h和步驟6中生成的靜態sqlite3.lib復制到test2工程所在的文件目錄中,我的是E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test2\test2。
10.在VS2010中,右鍵test2工程->添加->現有項。選擇sqlite3.lib。
11.按F5鍵,運行成功。
PS:這時,在E:\SoftwareDesign\SQLite\VisualStudio2010Workspace\Projects\test2\Debug下會生成test2.exe(大小為501KB)。雙擊可以直接運行。此時不需dll文件支持。因為靜態的sqlite3.lib將導出聲明和實現都放在lib中,編譯後所有代碼都嵌入到test2.exe,可直接運行。

閱讀全文

與vs編譯sqlite相關的資料

熱點內容
程序員用什麼鍵盤羅技 瀏覽:167
為什麼安卓手機每天都要更新app 瀏覽:705
java怎麼成為程序員 瀏覽:288
西門子s7200編程電纜怎麼連接 瀏覽:530
下載網頁中的pdf文件 瀏覽:87
音樂緩存文件夾的軟體 瀏覽:394
Dkms編譯列印機驅動 瀏覽:992
解壓縮文件操作異常 瀏覽:555
等待代碼編譯時你會幹嘛 瀏覽:493
單片機c語言中變數右移8位 瀏覽:81
解壓的一個小短片 瀏覽:831
二級壓縮空壓機哪家好排行 瀏覽:743
基於單片機超聲波測距 瀏覽:130
模擬隨機紅包演算法 瀏覽:386
程序員接外包網站 瀏覽:135
哪裡可以買拆車件app 瀏覽:992
限流演算法漏桶和令牌桶區別 瀏覽:316
程序員怎麼找兼職 瀏覽:802
java編譯路徑 瀏覽:283
伺服器修改mac地址是什麼 瀏覽:581