SDK

 SDK是什麼?在學校時印象中的SDK就是一堆庫或者包,使用時導入到工程中,就能夠像使用標準庫同樣的使用。沒有更深刻的瞭解sdk中都有什麼,爲何可以這麼方便的使用,甚至SDK與API具備有什麼區別也搞不清楚。編程

  直到在工做中須要用到SDK,須要在編譯選項中指定路徑,包含庫;須要在環境配置中使用SDK提供的工具;纔對SDK有了更進一步的認識。框架

   SDK,Software Development Kit 的縮寫,中文即「軟件開發工具包」。廣義上指輔助開發某一類軟件的相關文檔、範例和工具的集合。SDK中至少包含這麼幾個重要的部分。函數

1. 頭文件的集合。好比放在include文件夾下,須要在使用的時候引用該頭文件。須要在編譯系統中爲其指定路徑。工具

2. 庫文件的集合。好比放在lib文件夾下。在引用頭文件以後還須要包含相應的庫文件。須要在編譯系統中爲其指定路徑,而且指定連接的庫名稱。學習

3. 工具鏈。好比放在toolchains下。裏面包含了經常使用的工具,好比gcc g++ ld strip as arm-gdb等。包括編譯、彙編、連接、調試等各類各樣須要用到的工具開發工具

4. 實例程序。操作系統

5. 文檔。調試

  這些只是最基本的,幾乎每一個SDK都會包含的東西,有的SDK提供的東西遠遠不僅這些。教程

SDK 就是 Software Development Kit 的縮寫,中文意思就是「軟件開發工具包」。這是一個覆蓋面至關普遍的名詞,能夠這麼說:輔助開發某一類軟件的相關文檔、範例和工具的集合均可以叫作「SDK」。具體到咱們這個系列教程,咱們後面只討論廣義 SDK 的一個子集——即開發 Windows 平臺下的應用程序所使用的 SDK。 其實上面只是說了一個 SDK 大概的概念而已,理解什麼是 SDK 真有這麼容易嗎?恐怕沒這麼簡單!爲了解釋什麼是 SDK 咱們不得不引入 API、動態連接庫、導入庫等等概念。^_^,不要怕,也就是幾個新的名詞而已,我也是到了大學快結束的時候才體會到其實學習新知識就是在學習新名詞、新概念和新術語。 首先要接觸的是「API」,也就是 Application Programming Interface,其實就是操做系統留給應用程序的一個調用接口,應用程序經過調用操做系統的 API 而使操做系統去執行應用程序的命令(動做)。其實早在 DOS 時代就有 API 的概念,只不過那個時候的 API 是以中斷調用的形式(INT 21h)提供的,在 DOS 下跑的應用程序都直接或間接的經過中斷調用來使用操做系統功能,好比將 AH 置爲 30h 後調用 INT 21h 就能夠獲得 DOS 操做系統的版本號。而在 Windows 中,系統 API 是以函數調用的方式提供的。一樣是取得操做系統的版本號,在 Windows 中你所要作的就是調用 GetVersionEx() 函數。能夠這麼說,DOS API 是「Thinking in 彙編語言」的,而 Windows API 則是「Thinking in 高級語言」的。DOS API 是系統程序的一部分,他們與系統一同被載入內存而且能夠經過中斷矢量表找到他們的入口,那麼 Windows API 呢?要說明白這個問題就不得不引入咱們下面要介紹得這個概念——DLL。 DLL(又是一個縮寫,感受 IT 這個行業裏三字頭縮寫特別多),即 Dynamic Link Library(動態連接庫)。咱們常常會看到一些 .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 的含義。 因爲 SDK 包含了使用 API 的必需資料,因此人們也常把僅使用 API 來編寫 Windows 應用程序的開發方式叫作「SDK 編程」。而 API 和 SDK 是開發 Windows 應用程序所必需的東西,因此其它編程框架和類庫都是創建在它們之上的,好比 VCL 和 MFC,雖然他們比起「SDK 編程」來有着更高的抽象度,但這絲絕不妨礙它們在須要的時候隨時直接調用 API 函數
相關文章
相關標籤/搜索