靜態庫與動態庫

2021-08-01 21:31:08 字數 533 閱讀 4642

當程式與靜態庫連線時,庫中目標檔案所含的所有將被程式使用的函式的機器碼被copy到最終的可執行檔案中。這就會導致最終生成的可執行**量相對變多,相當於編譯器將**補充完整了,這樣執行起來相對就快些。不過會有個缺點: 占用磁碟和記憶體空間. 靜態庫會被新增到和它連線的每個程式中, 而且這些程式執行時, 都會被載入到記憶體中. 無形中又多消耗了更多的記憶體空間.

與共享庫連線的可執行檔案只包含它需要的函式的引用表,而不是所有的函式**,只有在程式執行時,那些需要的函式**才被拷貝到記憶體中。這樣就使可執行檔案比較小, 節省磁碟空間,更進一步,作業系統使用虛擬記憶體,使得乙份共享庫駐留在記憶體中被多個程式使用,也同時節約了記憶體。不過由於執行時要去鏈結庫會花費一定的時間,執行速度相對會慢一些,總的來說靜態庫是犧牲了空間效率,換取了時間效率,共享庫是犧牲了時間效率換取了空間效率,沒有好與壞的區別,只看具體需要了。

另外,.乙個程式編好後,有時需要做一些修改和優化,如果我們要修改的剛好是庫函式的話,在介面不變的前提下,使用共享庫的程式只需要將共享庫重新編譯就可以了,而使用靜態庫的程式則需要將靜態庫重新編譯好後,將程式再重新編譯一便。

靜態庫與動態庫

linux下靜態庫 a 的例子 mylib.h 位於include資料夾下 ifndef mylib h define mylib h int add int a,int b endif mylib.cpp 位於lib資料夾中 include mylib.h int add int a,int b ...

靜態庫與動態庫

庫本質上是一種可執行的二進位制 可以被作業系統載入 linux和windows的庫是不相容的 庫可以分為靜態塊和動態庫,二者的不同點在於 被載入的時刻不同。靜態庫 在程式編譯時會被連線到目標 中,程式執行時不再需要改靜態庫,體積較大,一般應用與移植過程中在宿主機上編譯的 靜態庫檔名的命名規範是以li...

靜態庫與動態庫

1.靜態庫 工程在呼叫靜態庫時,複製靜態庫,源 加長,不節省程式空間。字尾名.a 優點 程式設計後不需要再依賴庫 以空間換時間 建立靜態庫 gcc c 原始檔.c ar rcs rcu 靜態庫名 目標檔案1 目標檔案2 rc 靜態庫不存在,就建立該庫檔案 s 更新靜態庫 使用 gcc o file ...