差分

2016-08-16 27 views
-1

引用維基百科關於動態加載差分

動態加載是一種機制,通過該計算機程序可以在運行時,則裝入一個庫到內存中,不象靜態鏈接和動態鏈接,動態加載允許計算機程序在沒有這些庫的情況下啓動。

所以,糾正我,如果我錯了,但在動態加載,圖書館通過負載庫函數加載明確

而在動態鏈接,裝載和鏈接由可執行所需的共享庫被推遲,直到運行時,該OS 是負責複製庫的從持久存儲到RAM中的內容。

請問您能否簡單的說一下動態鏈接和動態加載之間的區別?我仍然困惑。

感謝先進!

+2

[動態加載和動態鏈接的區別?](http://stackoverflow.com/questions/10052464/difference-between-dynamic-loading-and-dynamic-linking) – bolov

回答

1

你似乎被掛在術語上。術語「動態鏈接」對於實際發生的事情是不恰當的。

鏈接器一般處理三種類型的文件:

  1. 對象文件
  2. 對象庫
  3. 共享庫

對象庫只是一個包含其他對象文件可以將文件從中提取出來,所以我會忽略這個選擇。

目標文件包含由文件定義的全局符號表和文件引用的全局符號表。鏈接器將在文件中的引用「鏈接」到另一個文件中的定義。它將鏈接文件的代碼和數據內容添加到可執行文件(或共享庫)。

共享庫包含一個由庫定義的通用符號表和庫引用的通用符號。鏈接器將對象文件中的全局符號引用「鏈接」到共享庫文件。在鏈接完成時,可執行文件(或共享庫)知道共享庫文件包含符號,但不知道符號在哪裏。

有時,鏈接這種共享庫的過程稱爲「動態鏈接」。

該可執行文件具有已映射到通用符號共享庫的全局符號引用表。

當您運行可執行文件時,程序加載程序會檢查引用的可執行的前共享庫。然後它會(1)加載共享庫; (2)讀取庫的通用符號表並查找引用符號的地址; (3)修復可執行文件中對這些符號的引用。

因爲共享庫可以引用其他共享庫,所以這是一個遞歸過程。

有時候,在運行時加載引用共享庫的程序的過程稱爲「動態鏈接」。 (現在我們有兩個相同的術語定義。)

許多操作系統使用相同的系統服務來加載共享庫並查找共享庫中通用符號的地址可用於應用程序。在運行時(加載應用程序之後),應用程序可以通過(1)加載共享庫和(2)找到所需符號來動態訪問函數或其他通用符號。

這就是你所說的「動態加載」。