1. 程式人生 > 其它 >動態庫和靜態庫的區別是什麼(轉)

動態庫和靜態庫的區別是什麼(轉)

區別:1、靜態庫的副檔名一般為“.a”或“.lib”;動態庫的副檔名一般為“.so”或“.dll”。2、靜態庫在編譯時會直接整合到目標程式中,編譯成功的可執行檔案可獨立執行;動態庫在編譯時不會放到連線的目標程式中,即可執行檔案無法單獨執行。

靜態(函式)庫

一般副檔名為(.a.lib),這類的函式庫通常副檔名為libxxx.axxx.lib 。

這類庫在編譯的時候會直接整合到目標程式中,所以利用靜態函式庫編譯成的檔案會比較大,這類函式庫最大的優點就是編譯成功的可執行檔案可以獨立執行,而不再需要向外部要求讀取函式庫的內容;但是從升級難易度來看明顯沒有優勢,如果函式庫更新,需要重新編譯。

動態函式庫

動態函式庫的副檔名一般為(.so.dll),這類函式庫通常名為libxxx.soxxx.dll 。

與靜態函式庫被整個捕捉到程式中不同,動態函式庫在編譯的時候,在程式裡只有一個“指向”的位置而已,也就是說當可執行檔案需要使用到函式庫的機制時,程式才會去讀取函式庫來使用;也就是說可執行檔案無法單獨執行。這樣從產品功能升級角度方便升級,只要替換對應動態庫即可,不必重新編譯整個可執行檔案。

綜上,不能看出:

從產品化的角度,釋出的演算法庫或功能庫儘量使動態庫,這樣方便更新和升級,不必重新編譯整個可執行檔案,只需新版本動態庫替換掉舊動態庫即可。

從函式庫整合的角度,若要將釋出的所有子庫(不止一個)整合為一個動態庫向外提供介面,那麼就需要將所有子庫編譯為靜態庫,這樣所有子庫就可以全部編譯進目標動態庫中,由最終的一個整合庫向外提供功能。