在回答這個問題之前希望大家大概了解乙個檔案編譯的過程,比如乙個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 檔案中,該檔案包含了執行時所需的全部 靜態鏈結的缺點是當多個程式都呼叫相同函式時,記憶體中就會存在這個函式的多個拷貝,這樣就了浪費了記憶體資源。動態鏈結是相對於靜態鏈結而言的,...