靜態鏈接 和 動態鏈接

靜態鏈接是由鏈接器在鏈接時將庫的內容加入到可執行程序中的做法。鏈接器是一個獨立程序,將一個或多個庫或目標文件(先前由編譯器彙編器生成)鏈接到一塊生成可執行程序。


動態鏈接英文是Dynamic Linking需要解決空間浪費和更新困難這兩個問題最簡單的辦法就是把程序的模塊相互劃分開來,形成獨立的文件,而不再將他們靜態的鏈接在一起。簡單地講,就是不對那些組成程序的目標文件進行鏈接,等到程序要運行時才進行鏈接。也就是說,把鏈接這個過程推遲到了運行時再進行,這就是動態鏈接(Dynamic Linking)的基本思想。


動態鏈接,在可執行文件裝載時或運行時,由操作系統的裝載程序加載庫。大多數操作系統將解析外部引用(比如庫)作爲加載過程的一部分。在這些系統上,可執行文件包含一個叫做import directory的表,該表的每一項包含一個庫的名字。根據表中記錄的名字,裝載程序在硬盤上搜索需要的庫,然後將其加載到內存中預先不確定的位置,之後根據加載庫後確定的庫的地址更新可執行程序。可執行程序根據更新後的庫信息調用庫中的函數或引用庫中的數據。這種類型的動態加載成爲裝載時加載 ,被包括Windows和Linux的大多數系統採用。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章