日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

静态链接库与动态链接库的区别(Sqlite\Visual Studio 2017)

發(fā)布時間:2024/9/30 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 静态链接库与动态链接库的区别(Sqlite\Visual Studio 2017) 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

本教程以Visual Studio 2017使用sqlite數(shù)據(jù)庫為例講解。

參考文章:https://zhidao.baidu.com/question/690811844627851604.html


動態(tài)鏈接庫與靜態(tài)來你接庫的區(qū)別:

????????動態(tài)鏈接庫,它允許程序共享執(zhí)行特殊任務(wù)所必需的代碼和其他資源。動態(tài)的sqlite3.lib相當于一個.h文件,是對實現(xiàn)部分(.dll文件)的導(dǎo)出部分的聲明。編譯后只是將導(dǎo)出聲明部分編譯到宿主程序中,其生成的sqlite3.exe在運行時需要相應(yīng)的dll(sqlite3.dll)文件支持 。
? ? ? ? 靜態(tài)的sqlite3.lib將導(dǎo)出聲明實現(xiàn)都放在lib中。編譯后所有代碼都嵌入到宿主程序,其生成的sqlite3.exe可直接運行,不在。
?
任務(wù):
? ? ? ? .?
使用VS2017編譯sqlite3,生成動態(tài)的sqlite3.lib和sqlite3.dll(sqlite3.dll在官網(wǎng)中也可下載到)。在VS2017中編寫簡單程序,使用動態(tài)的sqlite3.lib和sqlite3.dll。
? ? ? ? . 使用VS2017編譯sqlite3,生成靜態(tài)的sqlite3.lib。在VS2017中編寫簡單程序,使用靜態(tài)的sqlite3.lib。
?
任務(wù)一:
????1.在sqlite官網(wǎng)下載sqlite-amalgamation-3071000.zip 和sqlite-dll-win32-x86-3071000.zip(我用的此版本)。
????2.分別解壓上述兩個文件到各自文件夾下(sqlite3.def、sqlite3.dll在同一文件夾sqlite-dll下)。
? ?3.從VS2017的安裝目錄下Microsoft Visual Studio\2017\Community\VC\Tools\MSVC\14.12.25827\bin\Hostx86\x86\找到lib.exe和link.exe,從VS2017的安裝目錄下Microsoft Visual Studio\2017\Community\Common7\IDE找到mspdb140.dll。將lib.exe link.exe mspdb140.dll放到步驟2中的sqlite-dll文件夾下。
????4.打開cmd窗口,轉(zhuǎn)到上述sqlite-dll文件夾下,我的是E:\SoftwareDesign\SQLite\sqlite-dll
????5.輸入命令:lib /def:sqlite3.def /machine:IX86。這時,在sqlite-dll文件夾下會出現(xiàn)sqlite3.lib。(這是動態(tài)的sqlite3.lib文件,只有57KB大小。)
????6.在VS2017中編寫簡單程序。文件->新建->項目->空項目,命名為test1 。
????7.將test1.cpp中的內(nèi)容替換為以下代碼:
// test1.cpp : 定義控制臺應(yīng)用程序的入口點。??

#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) //輸出查詢結(jié)果 { printf("results[%d]= %s/n",i,results[i]); //此處可以自己定義輸出格式, } sqlite3_free_table(results); //free sqlite3_close(db); int a; scanf("%d",&a);//沒有此行代碼,運行窗口出現(xiàn)后會馬山消失。 return 0; } ?
????8.將sqlite3.h、sqlite3.lib、sqlite3.dll復(fù)制到工程所在文件目錄中。我的是E:\SoftwareDesign\SQLite\VisualStudio2017Workspace\Projects\test1\test1,如下圖所示:
????9.在VS2017中,右鍵test1工程,添加->現(xiàn)有項,在出現(xiàn)的對話框中選擇上一步中的sqlite3.lib。(必須將lib文件再添加到工程中)
????10.按F5鍵,運行成功。
PS:這時,到工程所在文件目錄下找到test1.exe(大小為38KB),我的是在E:\SoftwareDesign\SQLite\VisualStudio2017Workspace\Projects\test1\Debug。如果直接雙擊運行的話,會提示因缺少sqlite3.dll文件而無法運行。這是因為動態(tài)的sqlite3.lib只是將聲明部分編譯到test1.exe中,運行時需要dll文件的支持。將sqlite3.dll文件復(fù)制到test1.exe同一目錄下,再雙擊運行test1.exe,就會運行成功。
?

任務(wù)二:

????1.在VS2017中,文件->新建->項目->空項目,命名為sqlite3(其他名稱也行)。在項目->屬性->常規(guī)->配置類型:動態(tài)庫(.dll)。
????2.將下載的sqlite-amalgamation-3071000.zip 中的“sqlite3.h”、“sqlite3.c”、“sqlite3ext.h”三個文件添加到工程中,具體做法:右鍵sqlite3工程->添加->現(xiàn)有項,在出現(xiàn)的對話框中選擇上述三個文件。
????3.(release版本比debug版本體積小,運行速度快,所以操作中我發(fā)布的是release版本)
????4.按F7鍵編譯(或右鍵->生成)。在工程所在文件目錄中會編譯出sqlite3.dll文件。
????5.編譯的同時會在工程所在目錄中產(chǎn)生sqlite3.obj文件,我的是在E:\SoftwareDesign\SQLite\VisualStudio2017Workspace\Projects\sqlite3\sqlite3\Release下。接下來要用到VS安裝目錄下的lib.exe\link.exe文件(路徑參考上面)。將lib.exe\link.exe文件復(fù)制到sqlite3.obj所在目錄下。將E:\Microsoft Visual Studio\2017\Community\Common7\IDE下的mspdb140.dll,mspdbcore.dll,mspdbsrv.exe,msobj140.dll復(fù)制到sqlite3.obj所在目錄下。
????6.打開cmd窗口,轉(zhuǎn)到sqlite3.obj所在文件夾下。輸入命令:lib sqlite3.obj。這時會生成靜態(tài)的sqlite3.lib(大小為2.75MB)。
????7.在VS2017中編寫簡單程序。文件->新建->項目->空項目,命名為test2 。
????8.test2.cpp中的代碼替換為上述的代碼。(任務(wù)一步驟7中的代碼)
????9.將sqlite3.h和步驟6中生成的靜態(tài)sqlite3.lib復(fù)制到test2工程所在的文件目錄中,我的是E:\SoftwareDesign\SQLite\VisualStudio2017Workspace\Projects\test2\test2。
????10.在VS2017中,右鍵test2工程->添加->現(xiàn)有項。選擇sqlite3.lib。
????11.按F5鍵,運行成功。

PS:

????這時,在E:\SoftwareDesign\SQLite\VisualStudio2017Workspace\Projects\test2\Debug下會生成test2.exe(大小為977KB)。雙擊可以直接運行。此時不需dll文件支持。因為靜態(tài)的sqlite3.lib將導(dǎo)出聲明和實現(xiàn)都放在lib中,編譯后所有代碼都嵌入到test2.exe,可直接運行。

總結(jié)

以上是生活随笔為你收集整理的静态链接库与动态链接库的区别(Sqlite\Visual Studio 2017)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。