計算機庫

計算機科學中,庫(英語:library)是用於開發軟體的子程式集合。庫和執行檔的區別是,庫不是獨立程式,他們是向其他程式提供服務的代碼

庫連結是指把一個或多個庫包括到程式中,有兩種連結形式:靜態連結和動態連結,相應的,前者連結的庫叫做靜態庫後者的叫做動態庫

基本介紹

  • 中文名:計算機庫
  • 外文名:library
  • 分類電腦術語
靜態連結,動態連結,

靜態連結

靜態連結是由連結器在連結時將庫的內容加入到可執行程式中的做法。連結器是一個獨立程式,將一個或多個庫或目標檔案(先前由編譯器或彙編器生成)連結到一塊生成可執行程式。
靜態連結的最大缺點是生成的執行檔太大,需要更多的系統資源,在裝入記憶體時也會消耗更多的時間。

動態連結

動態連結,在執行檔裝載時或運行時,由作業系統的裝載程式載入庫。大多數作業系統將解析外部引用(比如庫)作為載入過程的一部分。在這些系統上,執行檔包含一個叫做import directory的表,該表的每一項包含一個庫的名字。根據表中記錄的名字,裝載程式在硬碟上搜尋需要的庫,然後將其載入到記憶體中預先不確定的位置,之後根據載入庫後確定的庫的地址更新可執行程式。可執行程式根據更新後的庫信息調用庫中的函式或引用庫中的數據。這種類型的動態載入稱為裝載(load-time)時載入,被包括Windows和Linux的大多數系統採用。裝載程式在載入套用軟體時要完成的最複雜的工作之一就是載入時連結。
其他作業系統可能在運行時解析引用。在這些系統上,可執行程式調用作業系統API將庫的名字、函式在庫中的編號和函式參數一同傳遞。作業系統負責立即解析然後代表套用調用合適的函式。這種動態連結叫做運行時連結。因為每個調用都會有系統開銷,運行時連結要慢得多,對套用的性能有負面影響。現代作業系統已經很少使用運行時連結。
可以動態連結的庫,在Windows上是dynamic link library(DLL),在UNIX或Linux上是Shared Library。庫檔案是預先編譯連結好的執行檔,存儲在計算機的硬碟上。大多數情況下,同一時間多個套用可以使用一個庫的同一份拷貝,作業系統不需要載入這個庫的多個實例。
動態連結的最大缺點是可執行程式依賴分別存儲的庫檔案才能正確執行。如果庫檔案被刪除、移動、重命名或者被替換為不兼容的版本,那么可執行程式就可能工作不正常。這就是常說的DLL-hell。

相關詞條

熱門詞條

聯絡我們