動(dòng)態(tài)鏈接庫(kù)是什么 linux動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別?
linux動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別?通常編譯動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)來(lái)集成一系列接口(函數(shù))程序源代碼編譯后,它是由編譯器編譯并通過(guò)鏈接器鏈接到這些庫(kù)中的動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的區(qū)別是鏈接器鏈接時(shí)靜態(tài)鏈接庫(kù)
linux動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別?
通常編譯動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)來(lái)集成一系列接口(函數(shù))
程序源代碼編譯后,它是由編譯器編譯并通過(guò)鏈接器鏈接到這些庫(kù)中的
動(dòng)態(tài)鏈接庫(kù)和靜態(tài)鏈接庫(kù)的區(qū)別是鏈接器鏈接時(shí)靜態(tài)鏈接庫(kù)會(huì)直接編譯到程序中
但是動(dòng)態(tài)鏈接庫(kù)不會(huì)被編譯,這些鏈接庫(kù)稱為依賴關(guān)系(動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù))
程序的運(yùn)行需要這些依賴關(guān)系。程序靜態(tài)鏈接后,程序本身已包含此依賴項(xiàng)
但動(dòng)態(tài)鏈接的程序本身不包含此依賴項(xiàng)。這些依賴項(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ù),而不需要更新所有依賴該庫(kù)的程序(軟件)
]另一方面,許多程序開(kāi)發(fā)都會(huì)使用相同的方法鏈接庫(kù),也就是說(shuō),許多程序(軟件)將具有相同的依賴關(guān)系
如果所有這些依賴關(guān)系都是靜態(tài)編譯的,它會(huì)造成存儲(chǔ)資源的過(guò)度消耗和資源的浪費(fèi)
并且通過(guò)使用動(dòng)態(tài)庫(kù),這些程序(軟件)可以共享一個(gè)鏈接庫(kù),而每個(gè)程序都沒(méi)有鏈接庫(kù),這大大減少了存儲(chǔ)資源的消耗空間
靜態(tài)庫(kù),。A和。框架動(dòng)態(tài)庫(kù),。Dylib和。框架靜態(tài)庫(kù):當(dāng)鏈接時(shí),靜態(tài)庫(kù)將被完全復(fù)制到可執(zhí)行文件并多次使用。舊的多個(gè)冗余副本的動(dòng)態(tài)庫(kù):鏈接時(shí),它將不會(huì)被復(fù)制。當(dāng)程序運(yùn)行時(shí),系統(tǒng)會(huì)將其動(dòng)態(tài)加載到內(nèi)存中,以便程序調(diào)用。系統(tǒng)只加載一次,多個(gè)程序共享,需要注意的是,如果在項(xiàng)目中使用自制的動(dòng)態(tài)庫(kù),無(wú)法上載到Appstore模擬器的體系結(jié)構(gòu)是x86A CD/users/Lili/library/Developer/Xcode/deriveddata/staticdemo gqjyc/build/products/libdev模擬器的Lib文件夾所在的目錄可以通過(guò)Lipo-info靜態(tài)庫(kù)文件地址來(lái)支持哪個(gè)平臺(tái)Lipo-info 靜態(tài)演示.ais弧體系結(jié)構(gòu):x86uarmv7、arm64(5S)和armv7s(iphone5c)被合并到一個(gè)靜態(tài)庫(kù)Lipo-createlibdev/staticdemo中。libpro/staticdemo。A-輸出HMTool.alipo文件-創(chuàng)建要合并的靜態(tài)庫(kù)1要合并的靜態(tài)庫(kù)2合并后的輸出文件夾名稱注:雖然實(shí)機(jī)和模擬器的靜態(tài)庫(kù)是合并的,但我們不會(huì)在意它將來(lái)是在模擬器中運(yùn)行還是在實(shí)機(jī)中運(yùn)行,但我們還是建議您使用靜態(tài)庫(kù)程序發(fā)布時(shí)的真實(shí)機(jī)器庫(kù)