動態庫與靜態庫的區別

2021-09-30 09:57:32 字數 818 閱讀 9834

.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檔案允許編譯器去查詢已經編譯好的二進位制 二,動態庫的...

動態庫與靜態庫的區別

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