平時總聽人講動態鏈結庫、靜態鏈結庫、lib、dll、so等名詞,一直搞不清楚這幾者之間的區別以及各自的應用場合。後來上網仔細查了一下資料,終於搞清楚了,在這裡整理一下先。
動態鏈結庫:動態鏈結庫中包含了多個已經被編譯、鏈結好的函式和資料資源,但並不包含函式的原始碼。動態鏈結庫在windows下是.dll 檔案,英文為dynamic link library,在linux下是.so檔案。如果在你的程式中使用了動態鏈結庫,那麼在程式執行時,會動態地將該庫載入,然後呼叫庫中的函式。動態庫的優點是便於維護和更新各個程式模組,比如在乙個大型程式中,會有數十個甚至更多的模組。使用動態庫封裝每個模組後,在需要更新某模組時,只需替換該模組對應的.dll或者.so檔案即可,而不需要更新整個程式,這一點是下文要講到的靜態鏈結庫無法實現的。
靜態鏈結庫:靜態鏈結庫在windows下是.lib檔案,在linux下是.a檔案。和動態鏈結庫不同,它包含了函式的源**,因此檔案大小通常比動態庫大很多。如果你的程式中依賴了某個靜態庫,那麼在你的程式編譯鏈結過程中,會自動從靜態庫中取出需要用到的函式**,然後和當前程式進行鏈結,生成可執行檔案。由此可見,最終的可執行檔案在執行時不再需要依賴靜態庫,可直接執行,這一點明顯區別於動態庫(在動態庫的情況中,程式在執行時必須能夠找到相應的動態庫檔案)。另外和動態庫不同的是,靜態庫中某函式更新後,整個程式需要重新編譯鏈結。
動態庫和靜態庫各有利弊,可根據應用要求選擇合適的使用方法。
ps:這裡還有乙個很重要的概念需要強調。在使用程式設計工具(如vs)編譯生成dll時,同時會生成.lib檔案,注意,這裡的.lib檔案並不是靜態鏈結庫,而是.dll的導入庫,是為了方便程式在dll中尋找相應函式的,所以千萬不能搞混了!
動態鏈結庫和靜態鏈結庫的區別
本文我們學習和了解一下動態鏈結庫和靜態鏈結庫的區別。靜態鏈結庫 lib檔案 將函式 編譯到應用程式中,應用程式執行時全部載入到記憶體。優點是不需要掛在dll檔案,缺點是生成的應用程式比較大。動態鏈結庫 lib和dll檔案 lib編譯到應用程式中,實際函式 寫在dll中。在應用程式執行時,lib只是用...
動態鏈結庫和靜態鏈結庫
函式和資料被編譯進乙個二進位制檔案 通常擴充套件名為.lib 在使用靜態庫的情況下,在編譯鏈結可執行檔案時,鏈結器從庫中複製這些函式和資料並把它們和應用程式的其它模組組合起來建立最終的可執行檔案 exe檔案 在使用動態鏈結庫的時候,往往提供兩個檔案 乙個引入庫和乙個dll。引入庫包含被dll匯出的函...
flex的動態鏈結庫和靜態鏈結庫
flex可以有兩種庫,一種是動態鏈結庫 rsl 一種是靜態鏈結庫。我們通常使用的swc是靜態鏈結庫,編譯的時候會直接把需要的東西編進去,包含在生成的swf中。swc檔案是一種壓縮檔案格式,裡面包含乙個library.swf 檔案乙個catalog.xml檔案。這其中包含的.swf檔案可以單提出來當成...