高頻面試點 靜態鏈結庫與動態鏈結庫

2021-10-09 12:00:13 字數 1027 閱讀 4221

庫是寫好的現有的,成熟的,可以復用的**。現實中每個程式都要依賴很多基礎的底層庫,不可能每個人的**都從零開始,因此庫的存在意義非同尋常

本質上來說庫是一種可執行**的二進位制形式,可以被作業系統載入記憶體執行。庫有兩種:靜態庫(.a、.lib)和動態庫(.so、.dll)。 windows上對應的是.lib .dll linux上對應的是.a .so

動態庫特點總結:

l 動態庫把對一些庫函式的鏈結載入推遲到程式執行的時期。

l 可以實現程序之間的資源共享。(因此動態庫也稱為共享庫)

l 將一些程式公升級變得簡單。

l 甚至可以真正做到鏈結載入完全由程式設計師在程式**中控制(顯示呼叫)。

window與linux執行檔案格式不同,在建立動態庫的時候有一些差異。

l 在windows系統下的執行檔案格式是pe格式,動態庫需要乙個dllmain函式做出初始化的入口,通常在匯出函式的宣告時需要有_declspec(dllexport)關鍵字

l linux下gcc編譯的執行檔案預設是elf格式,不需要初始化入口,亦不需要函式做特別的宣告,編寫比較方便。

與建立靜態庫不同的是,不需要打包工具(ar、lib.exe),直接使用編譯器即可建立動態庫。

動態鏈結庫與靜態鏈結庫

有人會想,動態鏈結這樣麻煩,為什麼還要用呢?這裡有乙個技術問題,對這個問題的解決直接導致了動態載入的需求。問題是有些dll只在某個windows版本中存在,或某個api只在某些windows版本中被加入指定的dll。當你使用靜態鏈結的.exe試圖在不支援的windows版本上執行時,系統會彈出系統對...

動態鏈結庫與靜態鏈結庫

原貼出處 http blog.csdn.net benny5609 archive 2008 04 17 2298998.aspxs 還有參考 http msdn.microsoft.com zh cn library 1ez7dh12 v vs.100 aspxs 首先通過乙個簡單的靜態鏈結庫的例...

靜態鏈結 庫 與動態鏈結 庫

靜態鏈結與動態鏈結 簡單的說,靜態庫和應用程式編譯在一起,在任何情況下都能執行,而動態庫是動態鏈結,顧名思義就是在應用程式啟動的時候才會鏈結,所以,當使用者的系統上沒有該動態庫時,應用程式就會執行失敗。再看它們的特點 動態庫 1.共享 多個應用程式可以使用同乙個動態庫,啟動多個應用程式的時候,只需要...