網(wǎng)絡(luò)交換機(jī)和路由器什么區(qū)別 linux動態(tài)庫和靜態(tài)庫的區(qū)別?
linux動態(tài)庫和靜態(tài)庫的區(qū)別?通常編譯動態(tài)鏈接庫和靜態(tài)鏈接庫來集成一系列接口(函數(shù))程序源代碼編譯后,它是由編譯器編譯并通過鏈接器鏈接到這些庫中的動態(tài)鏈接庫和靜態(tài)鏈接庫的區(qū)別是鏈接器鏈接時靜態(tài)鏈接庫
linux動態(tài)庫和靜態(tài)庫的區(qū)別?
通常編譯動態(tài)鏈接庫和靜態(tài)鏈接庫來集成一系列接口(函數(shù))
程序源代碼編譯后,它是由編譯器編譯并通過鏈接器鏈接到這些庫中的
動態(tài)鏈接庫和靜態(tài)鏈接庫的區(qū)別是鏈接器鏈接時靜態(tài)鏈接庫會直接編譯到程序中
但是動態(tài)鏈接庫不會被編譯,這些鏈接庫稱為依賴關(guān)系(動態(tài)庫和靜態(tài)庫)
程序的運行需要這些依賴關(guān)系。程序靜態(tài)鏈接后,程序本身已包含此依賴項
但動態(tài)鏈接的程序本身不包含此依賴項。這些依賴項需要執(zhí)行器將它們安裝到操作系統(tǒng)中(動態(tài)庫和運行時庫)
這些庫將在程序運行時動態(tài)加載
Linux動態(tài)庫的一般后綴為。所以
靜態(tài)庫的一般后綴是。A
因為靜態(tài)鏈接會直接將庫編譯到程序中,靜態(tài)編譯的程序比動態(tài)鏈接的程序大
這是因為靜態(tài)鏈接會將鏈接庫編譯到程序中,所以占用的空間會更大
因此,如果有靜態(tài)鏈接庫,靜態(tài)庫不易維護(hù)和更新實現(xiàn)中的bug,整個程序需要更新,因為靜態(tài)庫被編譯到程序中
而動態(tài)庫沒有這種情況,因為動態(tài)庫是在程序運行時動態(tài)加載的,所以我們只需要更新動態(tài)庫,而不需要更新所有依賴該庫的程序(軟件)
]另一方面,許多程序開發(fā)都會使用相同的方法鏈接庫,也就是說,許多程序(軟件)將具有相同的依賴關(guān)系
如果所有這些依賴關(guān)系都是靜態(tài)編譯的,它會造成存儲資源的過度消耗和資源的浪費
并且通過使用動態(tài)庫,這些程序(軟件)可以共享一個鏈接庫,而每個程序都沒有鏈接庫,這大大減少了存儲資源的消耗空間
靜態(tài)庫,。A和??蚣軇討B(tài)庫,。Dylib和。框架靜態(tài)庫:當(dāng)鏈接時,靜態(tài)庫將被完全復(fù)制到可執(zhí)行文件并多次使用。舊的多個冗余副本的動態(tài)庫:鏈接時,它將不會被復(fù)制。當(dāng)程序運行時,系統(tǒng)會將其動態(tài)加載到內(nèi)存中,以便程序調(diào)用。系統(tǒng)只加載一次,多個程序共享,需要注意的是,如果在項目中使用自制的動態(tài)庫,無法上載到Appstore模擬器的體系結(jié)構(gòu)是x86A CD/users/Lili/library/Developer/Xcode/deriveddata/staticdemo gqjyc/build/products/libdev模擬器的Lib文件夾所在的目錄可以通過Lipo-info靜態(tài)庫文件地址來支持哪個平臺Lipo-info 靜態(tài)演示.ais弧體系結(jié)構(gòu):x86uarmv7、arm64(5S)和armv7s(iphone5c)被合并到一個靜態(tài)庫Lipo-createlibdev/staticdemo中。libpro/staticdemo。A-輸出HMTool.alipo文件-創(chuàng)建要合并的靜態(tài)庫1要合并的靜態(tài)庫2合并后輸出文件夾名稱注:在合并了真實機(jī)器和模擬器的靜態(tài)庫之后,我們將不關(guān)心將來是在模擬器中運行還是在真實機(jī)器中運行,但是如果我們?nèi)匀唤ㄗh使用靜態(tài)庫真正的機(jī)器程序發(fā)布時
靜態(tài)庫加載到源代碼進(jìn)行編譯時編寫,如各種頭文件。
動態(tài)庫被映射到程序的內(nèi)存空間,以便在程序運行時進(jìn)行動態(tài)加載,例如DLL文件。