動態庫與靜態庫的區別

2021-08-26 10:50:03 字數 791 閱讀 9928

.dll是在你的程式執行的時候才連線的檔案,因此它是一種比較小的可執行檔案格式,.dll還有其他的檔案格式如.ocx等,所有的.dll檔案都是可執行。

.lib是在你的程式編譯連線的時候就連線的檔案,因此你必須告知編譯器連線的lib檔案在那裡。一般來說,與動態連線檔案相對比,lib檔案也被稱為是靜態連線庫。當你把**編譯成這幾種格式的檔案時,在以後他們就不可能再被更改。如果你想使用lib檔案,就必須:

1 包含乙個對應的標頭檔案告知編譯器lib檔案裡面的具體內容

2 設定lib檔案允許編譯器去查詢已經編譯好的二進位制**

如果你想從你的**分離乙個dll檔案出來代替靜態連線庫,仍然需要乙個lib檔案。這個lib檔案將被連線到程式告訴作業系統在執行的時候你想用到什麼dll檔案,一般情況下,lib檔案裡有相應的dll檔案的名字和乙個指明dll輸出函式入口的順序表。如果不想用lib檔案或者是沒有lib檔案,可以用win32 api函式loadlibrary、getprocaddress。事實上,我們可以在visual c++ ide中以二進位制形式開啟lib檔案,大多情況下會看到ascii碼格式的c++函式或一些過載操作的函式名字。

一般我們最主要的關於lib檔案的麻煩就是出現unresolved symble 這類錯誤,這就是lib檔案連線錯誤或者沒有包含.c、.cpp檔案到工程裡,關鍵是如果在c++工程裡用了c語言寫的lib檔案,就必需要這樣包含:

extern "c"

這是因為c語言寫的lib檔案沒有c++所必須的名字破壞,c函式不能被過載,因此聯結器會出錯。

文章出處:飛諾網(

www.diybl.com):

動態庫與靜態庫的區別

dll是在你的程式執行的時候才連線的檔案,因此它是一種比較小的可執行檔案格式,dll還有其他的檔案格式如.ocx等,所有的.dll檔案都是可執行。lib是在你的程式編譯連線的時候就連線的檔案,因此你必須告知編譯器連線的lib檔案在那裡。一般來說,與動態連線檔案相對比,lib檔案也被稱為是靜態連線庫。...

動態庫與靜態庫的區別

靜態庫 在編譯的時候載入生成目標檔案,在執行時不用載入庫,在執行時對庫沒有依賴性。動態庫 在目標檔案執行時載入,手動載入,且對庫有依賴性。兩者區別 一,靜態庫的使用需要 1 包含乙個對應的標頭檔案告知編譯器lib檔案裡面的具體內容 2 設定lib檔案允許編譯器去查詢已經編譯好的二進位制 二,動態庫的...

靜態庫與動態庫的區別

一 什麼是庫 庫實際上是一種 共享的方式,主要用於 重用和原始碼隱藏,通常分為動態庫和靜態庫。靜態庫 鏈結時完整的拷貝至可執行檔案中,被多次使用就有多份冗餘拷貝。動態庫 鏈結時不複製,程式執行時由系統動態載入到記憶體,供程式呼叫,系統只載入一次,多個程式共用,節省記憶體空間。二 什麼是.a bund...