程序源代碼編譯后,它是由編譯器編譯并通過(guò)鏈接器鏈接到這些庫(kù)中的
創(chuàng)新互聯(lián)公司是一家專(zhuān)注于做網(wǎng)站、成都網(wǎng)站制作與策劃設(shè)計(jì),新巴爾虎右網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)公司做網(wǎng)站,專(zhuān)注于網(wǎng)站建設(shè)十載,網(wǎng)設(shè)計(jì)領(lǐng)域的專(zhuān)業(yè)建站公司;建站業(yè)務(wù)涵蓋:新巴爾虎右等地區(qū)。新巴爾虎右做網(wǎng)站價(jià)格咨詢(xún):13518219792動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的區(qū)別是鏈接器鏈接時(shí)靜態(tài)鏈接庫(kù)會(huì)直接編譯到程序中
但是動(dòng)態(tài)鏈接庫(kù)不會(huì)被編譯,這些鏈接庫(kù)稱(chēng)為依賴(lài)關(guān)系(動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù))
程序的運(yùn)行需要這些依賴(lài)關(guān)系。程序靜態(tài)鏈接后,程序本身已包含此依賴(lài)項(xiàng)
但動(dòng)態(tài)鏈接的程序本身不包含此依賴(lài)項(xiàng)。這些依賴(lài)項(xiàng)需要執(zhí)行器將它們安裝到操作系統(tǒng)中(動(dòng)態(tài)庫(kù)和運(yùn)行時(shí)庫(kù))
這些庫(kù)將在程序運(yùn)行時(shí)動(dòng)態(tài)加載
Linux動(dòng)態(tài)庫(kù)的一般后綴為。所以
靜態(tài)庫(kù)的一般后綴是。A
因?yàn)殪o態(tài)鏈接會(huì)直接將庫(kù)編譯到程序中,靜態(tài)編譯的程序比動(dòng)態(tài)鏈接的程序大
這是因?yàn)殪o態(tài)鏈接會(huì)將鏈接庫(kù)編譯到程序中,所以占用的空間會(huì)更大
因此,如果有靜態(tài)鏈接庫(kù),靜態(tài)庫(kù)不易維護(hù)和更新實(shí)現(xiàn)中的bug,整個(gè)程序需要更新,因?yàn)殪o態(tài)庫(kù)被編譯到程序中
而動(dòng)態(tài)庫(kù)沒(méi)有這種情況,因?yàn)閯?dòng)態(tài)庫(kù)是在程序運(yùn)行時(shí)動(dòng)態(tài)加載的,所以我們只需要更新動(dòng)態(tài)庫(kù),而不需要更新所有依賴(lài)該庫(kù)的程序(軟件)
]另一方面,許多程序開(kāi)發(fā)都會(huì)使用相同的方法鏈接庫(kù),也就是說(shuō),許多程序(軟件)將具有相同的依賴(lài)關(guān)系
如果所有這些依賴(lài)關(guān)系都是靜態(tài)編譯的,它會(huì)造成存儲(chǔ)資源的過(guò)度消耗和資源的浪費(fèi)
通過(guò)使用動(dòng)態(tài)庫(kù),這些程序(軟件)可以共享一個(gè)鏈接庫(kù),而每個(gè)程序都沒(méi)有鏈接庫(kù),這大大減少了存儲(chǔ)資源的消耗空間
動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)都是一組函數(shù),它們打包在一起供應(yīng)用程序調(diào)用。區(qū)別在于靜態(tài)庫(kù)的名稱(chēng)一般是XXX。A、它在編譯時(shí)與應(yīng)用程序鏈接。這樣的應(yīng)用程序占用了更多的空間。動(dòng)態(tài)庫(kù)名稱(chēng)通常是某某對(duì)于動(dòng)態(tài)庫(kù),可以在編譯時(shí)鏈接它們,或者使用dlopen()/dlsym()/dlclose()函數(shù)在運(yùn)行時(shí)調(diào)用它們。后者占用空間小,可以實(shí)現(xiàn)進(jìn)程間動(dòng)態(tài)庫(kù)的共享,只需在內(nèi)存中保留一個(gè)副本,降低了內(nèi)存開(kāi)銷(xiāo)。
linux下的動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)到底是個(gè)什么鬼?動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)通常編譯為集成一系列接口(函數(shù))。程序源代碼編譯后,由編譯器編譯并通過(guò)鏈接器與這些庫(kù)鏈接。動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的區(qū)別在于,當(dāng)鏈接器鏈接時(shí),靜態(tài)鏈接庫(kù)會(huì)直接編譯到程序中,而動(dòng)態(tài)鏈接庫(kù)不會(huì)有的鏈接庫(kù)稱(chēng)為依賴(lài)關(guān)系(動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù))。程序的運(yùn)行需要這些依賴(lài)關(guān)系。程序靜態(tài)鏈接后,程序本身包含依賴(lài)項(xiàng),而動(dòng)態(tài)鏈接的程序本身不包含依賴(lài)項(xiàng)。這些依賴(lài)關(guān)系需要執(zhí)行者自己將它們安裝到操作系統(tǒng)(動(dòng)態(tài)庫(kù)和運(yùn)行庫(kù))中。當(dāng)程序運(yùn)行時(shí),Linux上的動(dòng)態(tài)庫(kù)將被動(dòng)態(tài)加載,一般后綴為。所以,靜態(tài)庫(kù)的一般后綴是。A.由于靜態(tài)鏈接將庫(kù)直接編譯到程序中,因此靜態(tài)編譯的程序比動(dòng)態(tài)鏈接大。這是因?yàn)殪o態(tài)鏈接會(huì)將鏈接庫(kù)編譯成程序,所以占用空間會(huì)很大。因此,靜態(tài)庫(kù)不易維護(hù)和更新,如果鏈接庫(kù)中有實(shí)現(xiàn)Bu,則靜態(tài)庫(kù)被編譯到程序中,而動(dòng)態(tài)庫(kù)則不是。因?yàn)閯?dòng)態(tài)庫(kù)是在程序運(yùn)行時(shí)動(dòng)態(tài)加載的,所以我們只需要更新動(dòng)態(tài)庫(kù),而不需要更新依賴(lài)于動(dòng)態(tài)庫(kù)的所有程序(軟件)。另一方面,許多程序開(kāi)發(fā)將使用相同的鏈接庫(kù),即許多程序(軟件)將具有相同的依賴(lài)關(guān)系。如果所有這些依賴(lài)項(xiàng)都是靜態(tài)編譯的,則會(huì)導(dǎo)致過(guò)多的存儲(chǔ)資源和資源浪費(fèi)。通過(guò)使用動(dòng)態(tài)庫(kù),這些程序(軟件)可以共享一個(gè)鏈接庫(kù),而不是每個(gè)程序共享一個(gè)鏈接庫(kù),這大大減少了存儲(chǔ)資源