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

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


咨詢
建站咨詢
