區(qū)別:1、靜態(tài)庫(kù)的擴(kuò)展名一般為“.a”或“.lib”;動(dòng)態(tài)庫(kù)的擴(kuò)展名一般為“.so”或“.dll”。2、靜態(tài)庫(kù)在編譯時(shí)會(huì)直接整合到目標(biāo)程序中,編譯成功的可執(zhí)行文件可獨(dú)立運(yùn)行;動(dòng)態(tài)庫(kù)在編譯時(shí)不會(huì)放到連接的目標(biāo)程序中,即可執(zhí)行文件無(wú)法單獨(dú)運(yùn)行。

本教程操作環(huán)境:windows10系統(tǒng)、Dell G3電腦。
靜態(tài)庫(kù)和動(dòng)態(tài)庫(kù)最本質(zhì)的區(qū)別就是:該庫(kù)是否被編譯進(jìn)目標(biāo)(程序)內(nèi)部。
靜態(tài)(函數(shù))庫(kù)
一般擴(kuò)展名為(.a或.lib),這類的函數(shù)庫(kù)通常擴(kuò)展名為libxxx.a或xxx.lib 。
這類庫(kù)在編譯的時(shí)候會(huì)直接整合到目標(biāo)程序中,所以利用靜態(tài)函數(shù)庫(kù)編譯成的文件會(huì)比較大,這類函數(shù)庫(kù)最大的優(yōu)點(diǎn)就是編譯成功的可執(zhí)行文件可以獨(dú)立運(yùn)行,而不再需要向外部要求讀取函數(shù)庫(kù)的內(nèi)容;但是從升級(jí)難易度來(lái)看明顯沒(méi)有優(yōu)勢(shì),如果函數(shù)庫(kù)更新,需要重新編譯。
動(dòng)態(tài)函數(shù)庫(kù)
動(dòng)態(tài)函數(shù)庫(kù)的擴(kuò)展名一般為(.so或.dll),這類函數(shù)庫(kù)通常名為libxxx.so或xxx.dll 。
與靜態(tài)函數(shù)庫(kù)被整個(gè)捕捉到程序中不同,動(dòng)態(tài)函數(shù)庫(kù)在編譯的時(shí)候,在程序里只有一個(gè)“指向”的位置而已,也就是說(shuō)當(dāng)可執(zhí)行文件需要使用到函數(shù)庫(kù)的機(jī)制時(shí),程序才會(huì)去讀取函數(shù)庫(kù)來(lái)使用;也就是說(shuō)可執(zhí)行文件無(wú)法單獨(dú)運(yùn)行。這樣從產(chǎn)品功能升級(jí)角度方便升級(jí),只要替換對(duì)應(yīng)動(dòng)態(tài)庫(kù)即可,不必重新編譯整個(gè)可執(zhí)行文件。
綜上,不能看出:
從產(chǎn)品化的角度,發(fā)布的算法庫(kù)或功能庫(kù)盡量使動(dòng)態(tài)庫(kù),這樣方便更新和升級(jí),不必重新編譯整個(gè)可執(zhí)行文件,只需新版本動(dòng)態(tài)庫(kù)替換掉舊動(dòng)態(tài)庫(kù)即可。
從函數(shù)庫(kù)集成的角度,若要將發(fā)布的所有子庫(kù)(不止一個(gè))集成為一個(gè)動(dòng)態(tài)庫(kù)向外提供接口,那么就需要將所有子庫(kù)編譯為靜態(tài)庫(kù),這樣所有子庫(kù)就可以全部編譯進(jìn)目標(biāo)動(dòng)態(tài)庫(kù)中,由最終的一個(gè)集成庫(kù)向外提供功能。
站長(zhǎng)資訊網(wǎng)