區別:1、靜態函式庫的副檔名一般為「.a」或「.lib」;動態函式庫的副檔名一般為「.so」或「.dll」。 2.靜態函式庫在編譯時會直接整合到目標程式中,編譯成功的可執行檔可獨立運作;動態函式庫在編譯時不會放到連線的目標程式中,即可執行檔無法單獨執行。
本教學操作環境:windows10系統、Dell G3電腦。
靜態函式庫和動態函式庫最本質的差異就是:該函式庫是否被編譯進目標(程式)內部。
靜態(函數)函式庫
一般副檔名為(.a
或.lib
),這類的函數函式庫通常副檔名為libxxx.a
或xxx.lib
。
這類函式庫在編譯的時候會直接整合到目標程式中,所以利用靜態函式庫編譯成的檔案會比較大,這類函數函式庫最大的優點就是編譯成功的可執行檔可以獨立運行,而不再需要向外部要求讀取函數庫的內容;但是從升級難度來看明顯沒有優勢,如果函數庫更新,需要重新編譯。
動態函數函式庫
動態函式庫的副檔名一般為(.so
或.dll
),這類別函數庫通常名為libxxx.so
或xxx.dll
。
與靜態函式庫被整個捕捉到程式中不同,動態函式庫在編譯的時候,在程式裡只有一個「指向」的位置而已,也就是說當可執行檔需要使用到函式庫的機制時,程式才會去讀取函數庫來使用;也就是說可執行檔無法單獨運作。這樣從產品功能升級角度方便升級,只要取代對應動態函式庫即可,不必重新編譯整個執行檔。
綜上,不能看出:
從產品化的角度,發布的演算法庫或功能庫盡量使動態函式庫,這樣方便更新和升級,不必重新編譯整個可執行文件,只需新版本動態庫替換掉舊動態庫即可。
從函數庫集成的角度,若要將發布的所有子庫(不止一個)集成為一個動態庫向外提供接口,那麼就需要將所有子庫編譯為靜態庫,這樣所有子函式庫就可以全部編譯進目標動態函式庫中,由最終的一個整合函式庫向外提供功能。
更多相關知識,請造訪常見問題欄位!
以上是動態函式庫和靜態函式庫的差別是什麼的詳細內容。更多資訊請關注PHP中文網其他相關文章!