cmake指定編譯器linux動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別?-創(chuàng)新互聯(lián)

程序源代碼編譯后,它是由編譯器編譯并通過(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ì)導(dǎo)致存儲(chǔ)資源的過(guò)度消耗和資源的浪費(fèi)
通過(guò)使用動(dòng)態(tài)庫(kù),這些程序(軟件)可以共享一個(gè)鏈接庫(kù),而每個(gè)程序都沒(méi)有鏈接庫(kù),這大大減少了存儲(chǔ)資源的消耗空間
創(chuàng)建和使用靜態(tài)庫(kù)第1步:編輯源文件,測(cè)試.htest.cmainc.主要的。C文件包含的主要功能為程序入口;測(cè)試。C包含main函數(shù)中所需的函數(shù)。vitest.htest.cmain公司.C步驟2:編譯測(cè)試。C轉(zhuǎn)換到目標(biāo)文件中。Gcc測(cè)試。Cif試驗(yàn)。C是正確的,您將得到目標(biāo)文件測(cè)試。第三步:創(chuàng)建靜態(tài)庫(kù)。O文件。arrcslibtest.atest測(cè)試.o步驟4:在程序中使用靜態(tài)庫(kù)。由于gcc-omainmain.c-l.-ltest是靜態(tài)編譯的,因此生成的可執(zhí)行文件可以獨(dú)立于。一個(gè)文件。第五步:實(shí)施。第一步是編輯源文件,測(cè)試.htest.cmainc.主要的。C文件包含的主要功能為程序入口;測(cè)試。C包含main函數(shù)中所需的函數(shù)。vitest.htest.cmain公司.C步驟2:編譯測(cè)試。C轉(zhuǎn)換到目標(biāo)文件中。gcc測(cè)試的前兩步。C與創(chuàng)建靜態(tài)庫(kù)是一致的。步驟3:從創(chuàng)建動(dòng)態(tài)庫(kù)文件。O文件。gcc共享fPIC-olibtest.sotest公司.o步驟4:使用程序中的動(dòng)態(tài)庫(kù)。Gcc-omainmain.c-l.-ltest當(dāng)靜態(tài)庫(kù)與動(dòng)態(tài)庫(kù)同名時(shí),Gcc命令優(yōu)先于動(dòng)態(tài)庫(kù)。第五步:實(shí)施。LD庫(kù)路徑=。/main示例5查看靜態(tài)庫(kù)中的文件[根@node56lib]#銀幣-tlibhycu.abase64號(hào).c.obinbuf.c.ocache.c.ochunk.c.ocodec公司
文章名稱:cmake指定編譯器linux動(dòng)態(tài)庫(kù)和靜態(tài)庫(kù)的區(qū)別?-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.xueling.net.cn/article/gpsog.html