這篇文章將為大家詳細(xì)講解有關(guān)linux中動態(tài)庫和靜態(tài)庫的區(qū)別有哪些,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),古縣企業(yè)網(wǎng)站建設(shè),古縣品牌網(wǎng)站建設(shè),網(wǎng)站定制,古縣網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,古縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
區(qū)別:1、靜態(tài)庫在程序編譯時會被連接到目標(biāo)代碼中,程序運行時將不再需要該靜態(tài)庫;動態(tài)庫在程序編譯時并不會被連接到目標(biāo)代碼中,而是在程序運行時才被載入,因此在程序運行時還需要動態(tài)庫存在。2、動態(tài)庫產(chǎn)生的文件比較小,靜態(tài)庫產(chǎn)生的文件比較大。
本教程操作環(huán)境:CentOS 6系統(tǒng)、Dell G3電腦。
相同點:
無論靜態(tài)庫,還是動態(tài)庫,都是由.o文件創(chuàng)建的。因此,我們必須將源程序通過gcc先編譯成.o文件;
區(qū)別:
1、代碼載入時間不同
靜態(tài)庫在程序編譯時會被連接到目標(biāo)代碼中,程序運行時將不再需要該靜態(tài)庫;
動態(tài)庫在程序編譯時并不會被連接到目標(biāo)代碼中,而是在程序運行時才被載入,因此在程序運行時還需要動態(tài)庫存在
2、編譯規(guī)則不同
動態(tài)庫編譯
動態(tài)類庫的名字一般是libxxx.so,動態(tài)函數(shù)庫在編譯的時候 并沒有被編譯進目標(biāo)代碼中,你的程序執(zhí)行到相關(guān)函數(shù)時才調(diào)用該函數(shù)庫里的相應(yīng)函數(shù),因此動態(tài)函數(shù)庫所產(chǎn)生的可執(zhí)行文件比較??;
動態(tài)庫編譯時:最主要的是GCC命令行的一個選項, -shared 該選項指定生成動態(tài)連接庫, 例如:
g++ -shared -o libd1.so d1.o /*根據(jù)中間目標(biāo)文件d1.o創(chuàng)建動態(tài)庫文件d1.so*/
g++ -shared -o libd2.so d2.o /*根據(jù)中間目標(biāo)文件d2.o創(chuàng)建動態(tài)庫文件d2.so*/
靜態(tài)庫編譯
類庫的名字一般是libxxx.a;利用靜態(tài)函數(shù)庫編譯成的文件比較大,因為整個 函數(shù)庫的所有數(shù)據(jù)都會被整合進目標(biāo)代碼中,他的優(yōu)點就顯而易見了,即編譯后的執(zhí)行程序不需要外部的函數(shù)庫支持,因為所有使用的函數(shù)都已經(jīng)被編譯進去了。當(dāng)然這也會成為他的缺點,因為如果靜態(tài)函數(shù)庫改變了,那么你的程序必須重新編譯。
UNIX中,使用ar命令創(chuàng)建或者操作靜態(tài)庫
ar archivefile objfile
archivefile:archivefile是靜態(tài)庫的名稱
objfile:objfile是已.o為擴展名的中間目標(biāo)文件名,可以多個并列;
例如:
g++ -o hello.o -c hello.cpp ar cqs libHello.a hello.o
關(guān)于“l(fā)inux中動態(tài)庫和靜態(tài)庫的區(qū)別有哪些”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。