小白的計算機基礎知識零碎

API(application programming interface,應用程序接口)

SDK (Software Development Kit,軟件開發工具包)

軟件開發工具包一般都是一些軟件工程師爲特定的軟件包、軟件框架、硬件平臺、操作系統等建立應用軟件時的開發工具的集合。

軟件開發工具包是一些被軟件工程師用於爲特定的軟件包、軟件框架、硬件平臺、操作系統等創建應用軟件的開發工具的集合,一般而言SDK即開發 Windows 平臺下的應用程序所使用的SDK。它可以簡單的爲某個程序設計語言提供應用程序接口API的一些文件,但也可能包括能與某種嵌入式系統通訊的複雜的硬件。一般的工具包括用於調試和其他用途的實用工具。SDK還經常包括示例代碼、支持性的技術註解或者其他的爲基本參考資料澄清疑點的支持文檔。

相關背景

API

API(Application Programming Interface,應用編程接口)其實就是操作系統留給應用程序的一個調用接口,應用程序通過調用操作系統的 API而使操作系統去執行應用程序的命令(動作)。

DLL

DLL,即Dynamic Link Library(動態鏈接庫)。在Windows 環境下含有大量 .dll格式的文件,這些文件就是動態鏈接庫文件,其實也是一種可執行文件格式。跟.exe文件不同的是,.dll文件不能直接執行,通常由.exe在執行時裝入,內含有一些資源以及可執行代碼等。其實Windows的三大模塊就是以DLL的形式提供的(Kernel32.dll,User32.dll,GDI32.dll),裏面就含有了API函數的執行代碼。爲了使用DLL中的API函數,必須要有API函數的聲明(.h)和其導入庫(.lib),導入庫可以先這樣理解,導入庫是爲了在DLL中找到API的入口點而使用的。
爲了使用API函數,我們就要有跟API所對應的.h和.lib文件,而SDK正是提供了一整套開發Windows應用程序所需的相關文件、範例和工具的“工具包”。
SDK包含了使用API的必需資料,所以也常把僅使用API來編寫Windows應用程序的開發方式叫做“SDK編程”。而API和SDK是開發Windows應用程序所必需的東西,所以其它編程框架和類庫都是建立在它們之上的,比如VCL和MFC,雖然比起“SDK 編程”來有着更高的抽象度,但這絲毫不妨礙在需要的時候隨時直接調用API函數 。
——來自百度百科(湊合理解一下吧,反正我也記不住哈哈哈)

lib 和 dll 的區別

首先介紹一下靜態庫(靜態鏈接庫)、動態庫(動態鏈接庫)的概念,首先兩者都是代碼共享的方式。

靜態庫:在鏈接步驟中,連接器將從庫文件取得所需的代碼,複製到生成的可執行文件中,這種庫稱爲靜態庫,其特點是可執行文件中包含了庫代碼的一份完整拷貝;缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指令都全部被直接包含在最終生成的 EXE 文件中了。在vs中新建生成靜態庫的工程,編譯生成成功後,只產生一個.lib文件

動態庫:動態鏈接庫是一個包含可由多個程序同時使用的代碼和數據的庫,DLL不是可執行文件。動態鏈接提供了一種方法,使進程可以調用不屬於其可執行代碼的函數。函數的可執行代碼位於一個 DLL 中,該 DLL 包含一個或多個已被編譯、鏈接並與使用它們的進程分開存儲的函數。在vs中新建生成動態庫的工程,編譯成功後,產生一個.lib文件和一個.dll文件

那麼上述靜態庫和動態庫中的lib有什麼區別呢?

靜態庫中的lib:該LIB包含函數代碼本身(即包括函數的索引,也包括實現),在編譯時直接將代碼加入程序當中

動態庫中的lib:該LIB包含了函數所在的DLL文件和文件中函數位置的信息(索引),函數實現代碼由運行時加載在進程空間中的DLL提供

總之,lib是編譯時用到的,dll是運行時用到的。如果要完成源代碼的編譯,只需要lib;如果要使動態鏈接的程序運行起來,只需要dll。
————————————————
版權聲明:本文爲CSDN博主「嘿哈哈哈」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/qq_39384184/article/details/102651096

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章