| 異同 | 靜態鏈接庫 | 動態鏈接庫 |
|---|---|---|
| 區別 | 兩個差別(一)靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果采用靜態鏈接庫,lib中的指令都全部被直接包含在最終生成的exe文件中了。但是若使用dll動態鏈接庫,該dll不必被包含在最終的exe文件中,執行文件執行時可以動態地引用和卸載這個與exe獨立的dll文件(二)靜態鏈接庫不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。 使用差別靜態鏈接庫動態鏈接庫使用的區別在於它允許可執行模塊(dll或exe文件)僅包含在運行時定位dll函數的可執行代碼的所需信息。靜態鏈接庫的使用中,連接器從靜態鏈接庫獲取所有被引用的函數,並將庫同代碼一起放到可執行文件中。 | |
| 各自特點 | 1 本身包含了代碼,地址符號表等-2 靜態鏈接庫是一個或多個obj文件的打包,所以有人干脆把從obj文件生成lib的過程稱為Archive即合並到一起。3當我們應用工程在使用靜態鏈接庫的時候,靜態鏈接庫要參與編譯,在生成執行文件之前的鏈接過程中,將靜態鏈接庫的全部指令直接鏈接如可執行文件中,故而,在可執行文件生成以后,靜態鏈接庫.lib可以棄之不用; | 1 實際執行的代碼位於動態庫中,到入庫只包含了地址符號表2動態鏈接庫是作為共享函數庫的可執行文件,動態鏈接庫提供了一種方法,是進程可以調用不屬於其可執行代碼的函數。dll 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個dll副本的內容。 |
| 優缺點 | 使用動態鏈接庫代替靜態鏈接庫優點:dll 節省內存,減少交換操作,節省磁盤空間,更易於升級(不需要重鏈接和重編譯),提供售后支持,提供MFC庫類的機制,支持多語言支持。 | |
| 備注 |
[表1:靜態鏈接庫與動態鏈接庫差別]
- 靜態庫本身就包含了代碼,地址符號表等,而對於導入庫而言,其實際的執行代碼位於動態庫中,導入庫只包含了地址符號表等,確保程序找到對應函數的一些基本地址信息;
- 靜態鏈接庫是一個或多個obj文件的打包,所以有人干脆把從obj文件生成lib的過程稱為Archive即合並到一起。當我們應用工程在使用靜態鏈接庫的時候,靜態鏈接庫要參與編譯,在生成執行文件之前的鏈接過程中,將靜態鏈接庫的全部指令直接鏈接如可執行文件中,故而,在可執行文件生成以后,靜態鏈接庫.lib可以棄之不用;
- 動態鏈接庫是作為共享函數庫的可執行文件,動態鏈接庫提供了一種方法,是進程可以調用不屬於其可執行代碼的函數。dll 還有助於共享數據和資源。多個應用程序可同時訪問內存中單個dll副本的內容。
- 使用動態鏈接庫代替靜態鏈接庫優點:dll 節省內存,減少交換操作,節省磁盤空間,更易於升級(不需要重鏈接和重編譯),提供售后支持,提供MFC庫類的機制,支持多語言支持。
- 靜態鏈接庫與動態鏈接庫都是共享代碼的方式,如果采用靜態鏈接庫,lib中的指令都全部被直接包含在最終生成的exe文件中了。但是若使用dll動態鏈接庫,該dll不必被包含在最終的exe文件中,執行文件執行時可以動態地引用和卸載這個與exe獨立的dll文件。
- 另一個區別是,靜態鏈接庫不能再包含其他的動態鏈接庫或者靜態庫,而在動態鏈接庫中還可以再包含其他的動態或靜態鏈接庫。
- 靜態鏈接庫動態鏈接庫使用的區別在於它允許可執行模塊(dll或exe文件)僅包含在運行時定位dll函數的可執行代碼的所需信息。靜態鏈接庫的使用中,連接器從靜態鏈接庫獲取所有被引用的函數,並將庫同代碼一起放到可執行文件中。
