分類: Lib是編譯時(shí)靜態(tài)鏈接庫(kù),,dll是運(yùn)行時(shí)動(dòng)態(tài)鏈接庫(kù)??赏ㄟ^(guò)不同的角度來(lái)看待這個(gè)問(wèn)題: (1)一般的動(dòng)態(tài)庫(kù)程序生成有l(wèi)ib文件和dll文件,。lib文件是必須在編譯期就連接到應(yīng)用程序中的,而dll文件是運(yùn)行期才會(huì)被調(diào)用的,。如果有dll文件,,那么對(duì)應(yīng)的lib文件一般是一些索引信息,具體的實(shí)現(xiàn)在dll文件中,。如果只有l(wèi)ib文件,,那么這個(gè)lib文件是靜態(tài)編譯出來(lái)的,索引和實(shí)現(xiàn)都在其中,。靜態(tài)編譯的lib文件有好處:給用戶安裝時(shí)就不需要再掛動(dòng)態(tài)庫(kù)了,。但也有缺點(diǎn),就是導(dǎo)致應(yīng)用程序比較大,,而且失去了動(dòng)態(tài)庫(kù)的靈活性,,在版本升級(jí)時(shí),同時(shí)要發(fā)布新的應(yīng)用程序才行,。 (2)在使用動(dòng)態(tài)庫(kù)的情況下,,有兩個(gè)文件,一個(gè)是引入庫(kù)(.LIB)文件,,一個(gè)是DLL文件,,引入庫(kù)文件包含被DLL導(dǎo)出的函數(shù)的名稱和位置,DLL則包含實(shí)際的函數(shù)和數(shù)據(jù),,應(yīng)用程序使用LIB文件鏈接到所需要使用的DLL文件,,庫(kù)中的函數(shù)和數(shù)據(jù)并不復(fù)制到可執(zhí)行文件中,因此在應(yīng)用程序的可執(zhí)行文件中,,存放的不是被調(diào)用的函數(shù)代碼,,而是DLL中所要調(diào)用的函數(shù)的地址,這樣當(dāng)一個(gè)或多個(gè)應(yīng)用程序運(yùn)行時(shí)再把程序代碼和被調(diào)用的DLL函數(shù)代碼鏈接起來(lái),,從而節(jié)省了內(nèi)存資源,。從上面的說(shuō)明可以看出,這種應(yīng)用情況下,,DLL和.LIB文件必須隨應(yīng)用程序一起發(fā)行,,缺.LIB文件導(dǎo)致編譯錯(cuò)誤,缺DLL文件導(dǎo)致運(yùn)行錯(cuò)誤,。 (3)DLL的LIB(導(dǎo)入庫(kù)),,不含可執(zhí)行的具體代碼(代碼在DLL中)。而最早的LIB(靜態(tài)鏈接庫(kù)),里面含有代碼,。所以,,可以看出來(lái),如果一個(gè)函數(shù)被調(diào)用多次,,使用DLL(動(dòng)態(tài)鏈接技術(shù)),,可以節(jié)省一些硬盤和內(nèi)存空間!而用LIB(靜態(tài)鏈接技術(shù)),,每次調(diào)用,,都會(huì)鏈接入相同的代碼,造成一些空間上的浪費(fèi),。不過(guò)它的好處是不需要進(jìn)行一個(gè)“查找”工作(也就是DLL應(yīng)用時(shí)要找到LIB文件中說(shuō)的DLL的“函數(shù)入口點(diǎn)”,,可以獲得更高的效率)。
|