天天看點

動态連結庫和靜态連結庫

Windows下動态庫和靜态庫差別:

動态連結庫(DLL)

動态連結庫和靜态連結庫:

動态連結庫一般不能直接執行,而且他們一般也不接收消息。

他們是包含許多函數的獨立檔案,這些函數可以被應用程式和其他DLL調用以完成特定的工作。

一個動态連結庫隻有在另一個子產品調用其所包含的函數時才啟動。

“靜态連結”一般是在程式開發過程中發生的,用于把一些連結在一起建立一個Windows可執行檔案。

這些檔案包括各種各樣的對象子產品(.OBJ),運作時庫檔案(.LIB),通常還有編譯的資源檔案(.RES)

與其相反,動态連結則發生在程式運作時。

靜态庫:函數和資料被編譯進一個二進制檔案,擴充名為(.lib)

在使用靜态庫的情況下,在編譯連結可執行檔案時:

連結器從靜态庫中複制這些函數和資料,并把他們和應用程式的其他子產品組合起來建立最終的可執行檔案(.exe)

當釋出産品時,隻需要釋出這個可執行檔案,并不需要釋出被使用的靜态庫。

“動态連結”是指Windows的連結過程,在這個過程中它把子產品中的函數與在庫子產品中的實際函數連結在一起。

動态庫:在使用動态庫時,往往提供兩個檔案:一個導入庫(.lib,非必須)和一個(.dll)檔案。

導入庫和靜态庫本質上的差別:

靜态庫本身就包含了實際執行代碼和位址符号等資料。

而對于導入庫而言,其實際的執行代碼位于動态庫中,導入庫隻包含了位址符号等,確定程式找到對應函數的一些基本位址資訊。

Linux下的動态庫生成名稱為.os的檔案,調用的方法基本相同。

c++

繼續閱讀