1. 程式人生 > >C語言函式庫:動態連結庫與靜態連結庫

C語言函式庫:動態連結庫與靜態連結庫

首先,函式庫就是一些事先寫好的函式的集合,是別人分享的,我們可以拿來使用的。經過一些校準和整理,就形成一份標準化的函式庫。例如glibc

函式庫有兩種提供形式:動態連結庫與靜態連結庫

早起函式庫裡的函式都是直接共享的,就是所謂的開源社群。後來函式庫商業化,就出現了靜態連結庫與動態連結庫。

他們是不直接給客戶提供原始碼,靜態連結庫是先將原始碼只編譯不連線形成.o檔案,再用tar工具將.o檔案歸檔成.a檔案(即靜態連結庫檔案),商業公司通過提供.a檔案庫和.h標頭檔案給客戶使用。客戶在使用的時候,通過檔案描述得知函式原型,在自己的.c檔案中直接呼叫這些庫檔案,然後在聯結器連線的時候去.a檔案庫裡取出那個函式對應的.o檔案,從而生成可執行程式。

動態連結庫相比靜態連結庫效率更高,假設多個程式都使用了某個函式庫,那麼靜態連結庫在連線生成可執行程式的時候就要重複佔有記憶體,而動態連結庫則不需要庫函式的程式碼段連線到可執行程式中,只是做個標記,等著執行過程中發現呼叫了一個動態庫裡的庫函式,就會去載入這個動態庫到記憶體中去,不會重複載入。