新聞中心
linux windows靜態(tài)庫和動態(tài)庫的區(qū)別?
兩者區(qū)別:

創(chuàng)新互聯(lián)建站主營安新網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都app軟件開發(fā)公司,安新h5成都微信小程序搭建,安新網(wǎng)站營銷推廣歡迎安新等地區(qū)企業(yè)咨詢
a,靜態(tài)庫的使用需要:
1包含一個對應(yīng)的頭文件告知編譯器lib文件里面的具體內(nèi)容
2設(shè)置lib文件允許編譯器去查找已經(jīng)編譯好的二進(jìn)制代碼
b,動態(tài)庫的使用:
程序運行時需要加載動態(tài)庫,對動態(tài)庫有依賴性,需要手動加入動態(tài)庫
c,依賴性:
靜態(tài)鏈接表示靜態(tài)性,在編譯鏈接之后,lib庫中需要的資源已經(jīng)在可執(zhí)行程序中了,也就是靜態(tài)存在,沒有依賴性了
動態(tài),就是實時性,在運行的時候載入需要的資源,那么必須在運行的時候提供需要的動態(tài)庫,有依賴性,運行時候沒有找到庫就不能運行了
d,區(qū)別:
怎么編寫Makefile生成靜態(tài)庫?
首先,可否將題目中對0.in,main.bat,main.sh的寫一下? 如果就按題主所說,那么Makefile如下(假設(shè)windows)
而且vs應(yīng)該不需要Makefile啊,Makefile主要是linux/mac/windows(mingw),vs自己能生成類似的東西。如何正確的使用靜態(tài)鏈接庫和動態(tài)鏈接庫?
動態(tài)庫和靜態(tài)庫
在Win下,動態(tài)庫以.dll結(jié)尾,靜態(tài)庫以.lib結(jié)尾。
在Linux下,動態(tài)庫文件以.so結(jié)尾,靜態(tài)庫以.a結(jié)尾。
在Mac下,動態(tài)庫以.dylib結(jié)尾,靜態(tài)庫以.a結(jié)尾。
動態(tài)庫的優(yōu)勢和劣勢
動態(tài)函數(shù)庫在編譯的時候并沒有被編譯進(jìn)目標(biāo)代碼中,你的程序執(zhí)行到相關(guān)函數(shù)時才調(diào)用該函數(shù)庫里的相應(yīng)函數(shù),因此動態(tài)函數(shù)庫所產(chǎn)生的可執(zhí)行文件比較小。由于函數(shù)庫沒有被整合進(jìn)你的程序,而是程序運行時動態(tài)的申請并調(diào)用,所以程序的運行環(huán)境中必須提供相應(yīng)的庫。 動態(tài)函數(shù)庫的改變并不影響你的程序,所以動態(tài)函數(shù)庫的升級比較方便。
某個程序在運行時要調(diào)用某個動態(tài)鏈接庫函數(shù)的時候,OS首先查看所有正在運行的進(jìn)程,找找看是否已經(jīng)有人載入了這個庫。如果有的話,直接用。如果沒有才會載入。這樣的第一個優(yōu)點就是節(jié)省內(nèi)存空間。動態(tài)調(diào)入意味著是等需要的時候才調(diào)入內(nèi)存,而不是不管用不用都要先放到內(nèi)存里來。
我如果想要升級某個軟件。如果升級的位置是在dll里,那軟件其他的部位不需要重新編譯鏈接。所以升級方便。
靜態(tài)庫的優(yōu)勢和劣勢
利用靜態(tài)函數(shù)庫編譯成的文件比較大,因為整個函數(shù)庫在編譯時都會被整合進(jìn)目標(biāo)代碼中,他的優(yōu)點就顯而易見了,即編譯后的執(zhí)行程序不需要外部的函數(shù)庫支持,因為所有使用的函數(shù)都已經(jīng)被編譯進(jìn)去了。當(dāng)然這也會成為他的缺點,因為如果你靜態(tài)鏈接的函數(shù)庫改變了,那么你的程序必須重新編譯。
linux標(biāo)準(zhǔn)庫是動態(tài)還是靜態(tài)?
編譯器的默認(rèn)設(shè)置是連接動態(tài)庫,這就要求在程序執(zhí)行的時候需要的動態(tài)庫必須存在。改變編譯選項可以變?yōu)殪o態(tài)連接,這樣生成的程序運行時不需要庫的支持,但是文件的尺寸一般較大。
linx的C標(biāo)準(zhǔn)庫都有,看你自己喜歡哪樣用哪樣。
當(dāng)要使用靜態(tài)的程序庫時,連接器會找出程序所需的函數(shù),然后將它們拷貝到執(zhí)行文件,由于這種拷貝是完整的,所以一旦連接成功,靜態(tài)程序庫也就不再需要了。
然而,對動態(tài)庫而言,就不是這樣。動態(tài)庫會在執(zhí)行程序內(nèi)留下一個標(biāo)記指明當(dāng)程序執(zhí)行時,首先必須載入這個庫。由于動態(tài)庫節(jié)省空間,linux下進(jìn)行連接的缺省操作是首先連接動態(tài)庫,也就是說,如果同時存在靜態(tài)和動態(tài)庫,不特別指定的話,將與動態(tài)庫相連接。
到此,以上就是小編對于查看靜態(tài)庫內(nèi)容的問題就介紹到這了,希望這4點解答對大家有用。
分享題目:linuxwindows靜態(tài)庫和動態(tài)庫的區(qū)別?windows查看靜態(tài)庫
轉(zhuǎn)載來源:http://m.fisionsoft.com.cn/article/djjgcsg.html


咨詢
建站咨詢
