作業系統(四) 動態鏈結與靜態鏈結的區別

2021-09-20 07:10:26 字數 916 閱讀 3792

在回答這個問題之前希望大家大概了解乙個檔案編譯的過程,比如乙個c檔案在編譯成功後資料夾裡的檔案會有什麼變化,大家可以先去建立乙個helloworld.c的檔案,觀察其編譯後的變化。

那麼問題來了 面試官經常會問到動態鏈結和靜態鏈結的區別,這到底是什麼鬼,作為馬上面試的小白如何快速理解這道題呢~ 不要急

這道題我們要理解動態庫和靜態庫區別,

靜態庫:linux下 lib***.a windows下***.lib

動態庫:linux下lib***.so windows下***.dll

靜態庫:lib包含函式**本身,在編譯時直接將**加入程式當中

動態庫:lib包含了函式所在的dll檔案和檔案中函式位置的資訊,**由執行時載入在程序空間中的dll提供

靜態鏈結需要靜態庫:鏈結器從靜態鏈結庫lib獲取所有被引用函式,並將庫同**一起放到可執行檔案中。

在輸入url中,我們發現有的url帶❓ 有的url不帶❓

那麼這個❓問號就是判斷動態鏈結和靜態鏈結的不二法門。

舉乙個例子:

開啟兩個**得到的內容會完全一樣,然而這個❓就是區分二者的關鍵

#pragma comment(lib, "test.lib") ,靜態鏈結的時候,載入**就會把程式會用到的動態**或動態**的位址確定下來靜態庫的鏈結可以使用靜態鏈結,動態鏈結庫也可以使用這種方法鏈結導入庫。

靜態鏈結較易被搜尋引擎蜘蛛抓取。

loadlibrary()/getprocessaddress()和freelibrary(),使用這種方式的程式並不在一開始就完成動態鏈結,而是直到真正呼叫動態庫**時,引導程式才計算(被呼叫的那部分)動態**的邏輯位址。然後等到某個時候,程式又需要呼叫另外某塊動態**時,引導程式又去計算這部分**的邏輯位址。

這種方式使程式初始化時間較短,但執行期間的效能比不上靜態鏈結的程式。

深度剖析可見:

靜態鏈結與動態鏈結

基於gmp開發第三方庫,後者以動態鏈結庫 靜態庫?對方式發布,為了效率gmp建議對該庫採用靜態鏈結,所以,目的是生成靜態鏈結gmp庫的庫檔案 動態庫?靜態庫?一 生成可執行檔案 1.動態鏈結庫的編譯 mac和linux都是 gcc o param convention1 param conventi...

靜態鏈結與動態鏈結的區別

動態鏈結庫 靜態庫 import庫區別 動態鏈結庫 dynamic linked library windows為應用程式提供了豐富的函式呼叫,這些函式呼叫都包含在動態鏈結庫中。其中有3個最重要的dll,kernel32.dll,它包含用於管理記憶體 程序和執行緒的各個函式 user32.dll,它...

靜態鏈結與動態鏈結的區別

靜態鏈結是指要把呼叫的函式或者過程直接鏈結到可執行檔案中,成為可執行檔案的一部分。換句話說,函式和過程的 就在程式的exe 檔案中,該檔案包含了執行時所需的全部 靜態鏈結的缺點是當多個程式都呼叫相同函式時,記憶體中就會存在這個函式的多個拷貝,這樣就了浪費了記憶體資源。動態鏈結是相對於靜態鏈結而言的,...