程序源代碼編譯后,它是由編譯器編譯并通過(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ǔ)資源的消耗空間
Linux中有兩種函數(shù)庫(kù):靜態(tài)庫(kù)共享庫(kù)(動(dòng)態(tài)庫(kù))。靜態(tài)庫(kù)的代碼在編譯時(shí)與開(kāi)發(fā)人員的應(yīng)用程序相連接,動(dòng)態(tài)庫(kù)的實(shí)際程序在運(yùn)行時(shí)加載。由于動(dòng)態(tài)庫(kù)不包含庫(kù)函數(shù)的實(shí)現(xiàn)代碼,而只包含對(duì)函數(shù)庫(kù)的引用,程序代碼規(guī)模相對(duì)較小,并且動(dòng)態(tài)庫(kù)的擴(kuò)展由它組成。所以。和版本號(hào),靜態(tài)鏈接庫(kù)包括。你可能測(cè)試不一樣,實(shí)現(xiàn)代碼,可能不一樣。動(dòng)態(tài)庫(kù)通常做得很好,而且通常比靜態(tài)庫(kù)好。當(dāng)然,這些功能已經(jīng)實(shí)現(xiàn)了。我想我不太熟悉的時(shí)候最好用動(dòng)態(tài)庫(kù)。因?yàn)椋绻撵o態(tài)庫(kù)在內(nèi)存中被多次調(diào)用,那么您將調(diào)用多個(gè)靜態(tài)庫(kù)實(shí)現(xiàn)代碼,這些代碼將被重復(fù)并浪費(fèi)內(nèi)存。在程序執(zhí)行過(guò)程中調(diào)用動(dòng)態(tài)庫(kù)
在Linux系統(tǒng)中,靜態(tài)庫(kù)是。一個(gè)文件。文件只需要添加的完整文件路徑。要編譯和鏈接的文件。一個(gè)文件,例如:GCC-Ohello。C/usr/lib/libm。Linux系統(tǒng)的動(dòng)態(tài)庫(kù)是。所以在系統(tǒng)中輸入文件。要編譯和鏈接動(dòng)態(tài)庫(kù),需要使用-L參數(shù)來(lái)指定動(dòng)態(tài)庫(kù)的搜索路徑,還需要使用-L(這是小寫的L)來(lái)指定動(dòng)態(tài)庫(kù)的名稱,例如GCC-Ohello。C-L/usr/OpenSSL/lib-lcrypto文件
網(wǎng)站題目:linuxgcc編譯找不到庫(kù)linux動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別?-創(chuàng)新互聯(lián)
本文地址:http://www.chinadenli.net/article16/cceidg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供定制開(kāi)發(fā)、用戶體驗(yàn)、網(wǎng)站維護(hù)、網(wǎng)站排名、靜態(tài)網(wǎng)站、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容