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

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


咨詢
建站咨詢
