庫(Library)就是一段編譯好的二進制代碼,加上頭文件就可以使用。
靜態庫
靜態鏈接庫(Mac 下的 .a)。之所以叫做靜態,是因為靜態庫在編譯的時候會被直接拷貝一份,復制到目標程序里,這段代碼在目標程序里就不會再改變了。
-
優點:
1、編譯完成之后,庫文件實際上就沒有作用了。目標程序沒有外部依賴,直接就可以運行。
2、代碼裝載速度快,執行速度略比動態鏈接庫快。 -
缺點:
1、會使用目標程序的體積增大。
2、包含相同的公共代碼,造成浪費,擴展性較差。
動態庫
動態鏈接庫(Mac 下的 .dylib)。與靜態庫相反,動態庫在編譯時并不會被拷貝到目標程序中,目標程序中只會存儲指向動態庫的引用。等到程序運行時,動態庫才會被真正加載進來。
-
優點:
1、不需要拷貝到目標程序中,不會影響目標程序的體積,而且同一份庫可以被多個程序使用(因為這個原因,動態庫也被稱作共享庫)。同時,編譯時才載入的特性,也可以讓我們隨時對庫進行替換,而不需要重新編譯代碼。
2、更加節省內存并減少頁面交換。
3、可維護性和可擴展性高。
4、適用于大規模的軟件開發,使開發過程獨立、耦合度小,便于不同開發者和開發組織之間進行開發和測試。 -
缺點:
1、動態載入會帶來一部分性能損失,使用動態庫也會使得程序依賴于外部環境。
2、如果環境缺少動態庫或者庫的版本不正確,就會導致程序無法運行(Linux 下喜聞樂見的 lib not found 錯誤)。