|
動(dòng)態(tài)庫(kù):libXXXX.so shared object
靜態(tài)庫(kù):linXXXX.a archive
靜態(tài)庫(kù)在鏈接為可執(zhí)行文件時(shí)就將靜態(tài)庫(kù)包含到可執(zhí)行文件中了,所以可執(zhí)行文件大,但不依賴所調(diào)用的靜態(tài)庫(kù)文件了,但是如果靜態(tài)庫(kù)文件變動(dòng)了就要重新鏈接。
在linux中靜態(tài)庫(kù)由ar命令生成,在windows或dos中,由lib命令生成。
在linux系統(tǒng)中可用的庫(kù)都存放在/usr/lib和/lib目錄中。庫(kù)文件名由前綴lib和庫(kù)名以及后綴組成。根據(jù)庫(kù)的類型不同,后綴名也不一樣。
共享庫(kù)的后綴名由.so和版本號(hào)組成,靜態(tài)庫(kù)的后綴名為.a。
靜態(tài)庫(kù)的名字一般為libxxxx.a,其中xxxx是該lib的名稱
動(dòng)態(tài)庫(kù)的名字一般為libxxxx.so.major.minor,xxxx是該lib的名稱,major是主版本號(hào),minor是副版本號(hào)
動(dòng)態(tài)庫(kù)在鏈接為可執(zhí)行文件時(shí)在可執(zhí)行文件中只是包含了所調(diào)用庫(kù)的名字和函數(shù)等的信息,需要在運(yùn)行時(shí)有操作系統(tǒng)幫助實(shí)現(xiàn)具體的解析和調(diào)用,當(dāng)然這是隱含式的調(diào)用動(dòng)態(tài)庫(kù)中的函數(shù),也可以顯式調(diào)用,就像windows中的loadlibrary和getprocessaddress以及l(fā)inux中的dlopen和dlsym。
在linux中動(dòng)態(tài)庫(kù)由gcc編譯器生成,在windows中由編譯器生成。
技術(shù)交流可以加黃工QQ2685896890 |
|