1.什麼是庫
在windows平台和linux平台下都存在著大量的庫。
本質上來說庫是一種可執行代碼的二進制形式,可以被操作系統載入內存執行。
由於windows和linux的本質不同,因此二者庫的二進制是不兼容的。
本文僅限於介紹linux下的庫。
2.庫的種類及區別
linux庫有分類
靜態庫和共享庫(動態庫)
區別:
後綴不同
通常共享庫以.so(SharedObject的縮寫)結尾,靜態鏈接庫通常以.a結尾(Archive的縮寫)。在終端缺省情況下,共享庫通常為綠色,而靜態庫為黑色。
代碼被載入的時刻不同
靜態庫——編譯時加載
動態庫——語句調運時加載
靜態庫的代碼在編譯過程中已經被載入可執行程序,因此體積較大。
動態庫,程序中只保留庫文件的名字和函數名,在運行時去查找庫文件和函數體並載入內存,程序的體積基本變化不大。
靜態庫的原則是“以空間換時間”,增加程序體積,減少運行時間;
動態庫則是“以時間換空間”,增加運行時間,減少了程序本身的體積。
不同的應用程序如果調用相同的動態庫,那麼在內存裡只需要有一份該動態庫的實例。
3.庫存在的意義
便於管理。
你調用函數的時候,只是一個#include就搞定,操作系統就自己幫你去找你要用的東西,(前提是你的環境變量要正確,或者你的庫在系統默認的地方),而且庫函數是成熟穩定的。
縮短開發周期。
你不用去編寫所用的代碼,你可以用牛人們已經用了千百遍的代碼——標准庫
這也是團隊合作的必要。你有時候只需要了解函數的功能、入口、出口。
有利於升級
如病毒庫的升級,具體的我還得查查資料。哈哈見笑。