函式庫 - Wikiwand
For faster navigation, this Iframe is preloading the Wikiwand page for 函式庫.

函式庫

維基百科,自由的百科全書

此條目需要擴充。 (2015年8月9日)請協助改善這篇條目,更進一步的訊息可能會在討論頁或擴充請求中找到。請在擴充條目後將此模板移除。
此條目沒有列出任何參考或來源。 (2015年8月9日)維基百科所有的內容都應該可供查證。請協助添加來自可靠來源的引用以改善這篇條目。無法查證的內容可能被提出異議而移除。

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

連結

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

靜態函式庫

靜態連結是由連結器在連結時將函式庫的內容加入到可執行程式中的做法。連結器是一個獨立程式,將一個或多個函式庫或目的檔(先前由編譯器組譯器生成)連結到一塊生成可執行程式。

靜態連結的最大缺點是生成的可執行檔太大,需要更多的系統資源,在裝入記憶體時也會消耗更多的時間。

共用函式庫

動態函式庫

此章節需要擴充。:可以參照英文維基百科上的條目Dynamic_linker,但由於來源和該條目過於局限,不建議直接翻譯 (2019年1月26日)

動態連結,在可執行檔裝載時執行時,由作業系統的裝載程式載入函式庫。大多數作業系統將解析外部參照(比如函式庫)作為載入過程的一部分。在這些系統上,可執行檔包含一個叫做import directory的表,該表的每一項包含一個函式庫的名字。根據表中記錄的名字,裝載程式在硬碟上搜尋需要的函式庫,然後將其載入到記憶體中預先不確定的位置,之後根據載入函式庫後確定的函式庫的位址更新可執行程式。可執行程式根據更新後的函式庫資訊呼叫函式庫中的函式或參照函式庫中的資料。這種類型的動態載入稱為裝載(load-time)時載入,被包括WindowsLinux的大多數系統採用。裝載程式在載入應用軟體時要完成的最複雜的工作之一就是載入時連結。

其他作業系統可能在執行時解析參照。在這些系統上,可執行程式呼叫作業系統API將函式庫的名字、函式在函式庫中的編號和函式參數一同傳遞。作業系統負責立即解析然後代表應用呼叫合適的函式。這種動態連結叫做執行時連結。因為每個呼叫都會有系統開銷,執行時連結要慢得多,對應用的效能有負面影響。現代作業系統已經很少使用執行時連結。

可以動態連結的函式庫,在Windows上是dynamic link library(DLL),在UNIXLinux上是Shared Library。函式庫檔案是預先編譯連結好的可執行檔,儲存在電腦硬碟上。大多數情況下,同一時間多個應用可以使用一個函式庫的同一份拷貝,作業系統不需要載入這個函式庫的多個實體。

動態連結的最大缺點是可執行程式依賴分別儲存的函式庫檔案才能正確執行。如果函式庫檔案被刪除、移動、重新命名或者被替換為不相容的版本,那麼可執行程式就可能工作不正常。這就是常說的DLL-hell

{{bottomLinkPreText}} {{bottomLinkText}}
函式庫
Listen to this article