C 中lib和dll的區別,生成以及使用詳解

時間 2022-04-30 22:45:03

1樓:弒之觴

首先介紹一下靜態庫(靜態連結庫)、動態庫(動態連結庫)的概念,首先兩者都是**共享的方式。

靜態庫:在連結步驟中,聯結器將從庫檔案取得所需的**,複製到生成的可執行檔案中,這種庫稱為靜態庫,其特點是可執行檔案中包含了庫**的一份完整拷貝;缺點就是被多次使用就會有多份冗餘拷貝。即靜態庫中的指令都全部被直接包含在最終生成的 exe 檔案中了。

在vs中新建生成靜態庫的工程,編譯生成成功後,只產生一個.lib檔案

動態庫:動態連結庫是一個包含可由多個程式同時使用的**和資料的庫,dll不是可執行檔案。動態連結提供了一種方法,使程序可以呼叫不屬於其可執行**的函式。

函式的可執行**位於一個 dll 中,該 dll 包含一個或多個已被編譯、連結並與使用它們的程序分開儲存的函式。在vs中新建生成動態庫的工程,編譯成功後,產生一個.lib檔案和一個.

dll檔案

那麼上述靜態庫和動態庫中的lib有什麼區別呢?

靜態庫中的lib:該lib包含函式**本身(即包括函式的索引,也包括實現),在編譯時直接將**加入程式當中

動態庫中的lib:該lib包含了函式所在的dll檔案和檔案中函式位置的資訊(索引),函式實現**由執行時載入在程序空間中的dll提供

總之,lib是編譯時用到的,dll是執行時用到的。如果要完成源**的編譯,只需要lib;如果要使動態連結的程式執行起來,只需要dll。

2樓:匿名使用者

靜態庫lib,動態庫dll

關於c中lib和dll的區別

3樓:匿名使用者

.h用於編譯階段的稽核,如在math.h中有函式宣告:

int abs(int);

但是在使用中寫為

#include

...abs(3,5);

編譯器階段就會檢測出錯誤。

.dll用於執行階段,如呼叫setwindowtext()函式等,需要在user32.dll中找到該函式。dll可以簡單認為是一種包含供別人呼叫的函式和資源的可執行檔案。

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

exe)過程中,需要在.lib檔案中查詢動態呼叫函式(一般為dll中的函式)的地址資訊,此時需要在lib檔案中查詢,如查詢setwindowtext()函式的地址偏移就需要查詢user32.lib檔案。

(.lib也可用於靜態連結的內嵌**)

windows中lib和dll的區別與使用

c++ 呼叫lib 和 dll的 方法 及 動態庫dll與靜態庫lib的區別

c++中**件和lib有什麼區別

4樓:匿名使用者

h是編寫程式所需要的標頭檔案,而lib是程式執行時需要的庫檔案,如果有些庫檔案不裝載是不能執行的!

5樓:匿名使用者

h是標頭檔案, 純文字, 標頭檔案中不是定義函式, 是宣告lib是編譯好的二進位制機器碼, 連結用

包含lib檔案, 要看是什麼連結器, 如果gcc, 首先路徑要包含, 然後加-l引數

比如abc.dll, 那就是gcc -o target.exe "source.o" -labc

c++中lib檔案如何在c#中呼叫?

6樓:匿名使用者

用lib檔案生成dll檔案,還要保證函式是匯出函式;

內在函式前加容上 extern "c" _declspec(dllexport)即可呼叫;

lib有兩種,一種是靜態庫,比如c-runtime庫,這種lib中有函式的實現**,一般用在靜態連編上,它是將lib中的**加入目標模組(exe或者dll)檔案中,所以連結好了之後,lib檔案就沒有用了。

7樓:匿名使用者

lib檔案要保證是靜態lib

即你建立工程的時候選的是win32 static library(靜態連結庫)

我不明白你為什麼不直接建立一個動態連結庫(dll)這樣呼叫就直接多了

難道你沒有源**?

Python中列表生成式和生成器的區別

列表生成式語法 x x for x in range 0,10 列表生成式,這裡是中括號 結果 0,1,4,9,16,25,36,49,64,81 x x for x in range 0,10 生成器,這裡是小括號 結果 at 0x7f0b072e6140 二者的區別很明顯 一個直接返回了表示式的...

c中new和override的區別

如果你用override,則無論呼叫的是a類還是b類中的test 系統都會找到它實質類的test 如果是用的new,則可以通過型別轉換呼叫到基類的test 下面是override的情況 a a new a b b new b a a1 new b a.test 呼叫a中test b.test 呼叫b...

概率和幾率的區別,概率中C和A的計算區別

率就是概率,兩者沒有區別。概率,亦稱 或然率 它是反映隨機事件出現的可能性大小。隨機事件是指在相同條件下,可能出現也可能不出現的事件。例如,從一批有 和次品的商品中,隨意抽取一件,抽得的是 就是一個隨機事件概率定義。概率一詞 於拉丁語 probabilitas 又可以解釋為 的意思是 正直 誠實 在...