windows下lib與dll關係

2021-06-16 13:52:39 字數 2015 閱讀 5190

1.lib與dll 區別

(1)lib是編譯時需要的,dll是執行時需要的。

如果要完成源**的編譯,有lib就夠了。

如果也使動態連線的程式執行起來,有dll就夠了。

在開發和除錯階段,當然最好都有。

(2)一般的動態庫程式有lib檔案和dll檔案。

lib檔案是必須在編譯期就連線到應用程式中的,而dll檔案是執行期才會被呼叫的。

如果有dll檔案,那麼對應的lib檔案一般是一些索引資訊,具體的實現在dll檔案中。

如果只有lib檔案,那麼這個lib檔案是靜態編譯出來的,索引和實現都在其中。

靜態編譯的lib檔案有好處:給使用者安裝時就不需要再掛動態庫了。

但也有缺點,就是導致應用程式比較大,而且失去了動態庫的靈活性,在版本公升級時,同時要發布新的應用程式才行。

(3)在動態庫的情況下,有兩個檔案,乙個是引入庫(.lib)檔案,乙個是dll檔案,

引入庫檔案包含被dll匯出的函式的名稱和位置,dll包含實際的函式和資料,應用程式使用lib檔案鏈結到所需要使

用的dll檔案,庫中的函式和資料並不複製到可執行檔案中,

因此在應用程式的可執行檔案中,存放的不是被呼叫的函式**,而是dll中所要呼叫的函式的記憶體位址,

這樣當乙個或多個應用程式執行是再把程式**和被呼叫的函式**鏈結起來,從而節省了記憶體資源。

從上面的說明可以看出,dll和.lib檔案必須隨應用程式一起發行,否則應用程式將會產生錯誤。

(4).dll用於執行階段,如呼叫setwindowtext()函式等,需要在user32.dll中找到該函式。

dll可以簡單認為是一種包含供別人呼叫的函式和資源的可執行檔案。

.lib用於鏈結階段,在鏈結各部分目標檔案(通常為.obj)到可執行檔案(通常為.exe)過程中,

需要在.lib檔案中查詢動態呼叫函式(一般為dll中的函式)的位址資訊,此時需要在lib檔案中查詢,

2 . lib檔案的製作與使用

在程式編譯鏈結過程中,如果涉及到的檔案比較少,我們只需要相應的標頭檔案(h)和原始檔(cpp/c)即可,但是如果檔案成千上萬,這樣效率就會很低下,此時就會用庫檔案(lib)來解決。將部分原始檔預先編譯成庫檔案,也即lib檔案, 當要使用其中的函式時,只需要鏈結lib檔案就可以了,而不用再理會最初的原始檔。例如在vc中新建乙個static library型別的工程,hello.cpp是我們需要的原始檔,其中包含大量函式實現。要想加入hello.cpp檔案,就應該編譯,就生成了lib檔案,假設檔名為hello.lib。別的工程要使用這個lib有兩種方式:(1) 在工程選項-〉link-〉object/library module中加入hello.lib(2) 可以在源**中加入一行指令#pragma comment(lib, "hello.lib")

注:這屬於靜態庫工程,所以,在編譯這種靜態庫工程時,你根本不會遇到鏈結錯誤。即使有錯,錯誤也只會在使用這個lib的exe或者dll工程中暴露出來。

3 .dll原理與使用

乙個dll工程和乙個exe工程的差別有兩點:

1 exe的入口函式是main或者winmain,而dll的入口函式是dllmain

2 exe的入口函式標誌著一段處理流程的開始,函式退出後,流程處理就結束了,而dll的入口函式對系統來說,只是路過,載入dll的時候路過一次,解除安裝dll的時候又路過一次[2],你可以在dll入口函式中做流程處理,但這通常不是dll的目的,dll的目的是要匯出函式供其它dll或exe使用。

如何寫乙個dll以及如何匯出函式,應該先嘗試用vc建立乙個新的動態鏈結庫工程,建立時選項不選空工程就可以了,

這樣你能得到乙個示例,以便開始在這個例子基礎上工作。

4. 動態鏈結庫與靜態鏈結庫

動態鏈結與靜態鏈結的不同之處在於:動態鏈結允許可執行模組(.dll 檔案或 .exe 檔案)僅包含在執行時定位 dll函式的可執行**所需的資訊。

在靜態鏈結中,鏈結器從靜態鏈結庫獲取所有被引用的函式,並將庫同**一起放到可執行檔案中。 使用動態鏈結代替靜態鏈結有若干優點。dll 節省記憶體,減少交換操作,節省磁碟空間,更易於公升級,提供售後支援,提供擴充套件 mfc 庫類的機制。

windows環境下lib和dll的區別和聯絡詳細

c 中共有兩種庫 1 lib包含了函式所在的dll檔案和檔案中函式位置的資訊 入口 由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。這種方式更靈活,寫的程式體積小,但是需要.exe和dll同時發布 2 lib包含函式 本身,在編譯時直接將 加入程式當中,...

lib與dll的區別

首先介紹一下靜態庫 靜態鏈結庫 動態庫 動態鏈結庫 的概念,首先兩者都是 共享的方式。靜態庫 在鏈結步驟中,聯結器將從庫檔案取得所需的 複製到生成的可執行檔案中,這種庫稱為靜態庫,其特點是可執行檔案中包含了庫 的乙份完整拷貝 缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指令都全部被直接包含在最...

dll與lib之間的區別

共有兩種庫 一種是lib包含了函式所在的dll檔案和檔案中函式位置的資訊 入口 由執行時載入在程序空間中的dll提供,稱為動態鏈結庫dynamic link library。一種是lib包含函式 本身,在編譯時直接將 加入程式當中,稱為靜態鏈結庫static link library。共有兩種鏈結方...