1. 程式人生 > >LIB,DLL區別 及 VS中如何新增LIB,DLL

LIB,DLL區別 及 VS中如何新增LIB,DLL

LIB和DLL檔案在建立工程專案時是必須要面對的,下面的文章講述瞭如何新增LIB和DLL檔案以及兩者的區別。

1.載入lib/標頭檔案

分兩種方法:

(1)適用於當前專案

1 第一步:專案->屬性->C/C++->常規->附加包含目錄(瀏覽.h檔案的路徑)   新增包含檔案
2 第二步:專案->屬性->C/C++->連結器->輸入->附加依賴項(寫入lib的名稱) 新增庫檔案
3     專案->屬性->C/C++->連結器->輸入->附加依賴項          新增用到的lib 
4 第三步:在要使用cpp檔案前加入 #include <gtest/gtest.h>(注意檔案的路徑)

(這一步也可以在程式碼中顯示呼叫 #pragma comment(lib, “***.lib”) )
(若不新增,連線報錯:無法解析的外部符號)

 上述方法,在每次建立工程時都要重新進行設定,而且debug和release都要進行設定,同時注意win32和win64平臺

(2)適用於所有專案,設定好後即使重建新專案也不需重新設定。

這種方法已經不適用於VS2010和VS2013

1 Tools->Options->Projects and Solutions->VC++ Directories ->Show directories for:(選擇include files)->新增.h路徑
2 Tools->Options->Projects and Solutions->VC++ Directories ->Show directories for:(選擇Library files)->新增lib路徑

(這些路徑只告訴編譯器怎麼找檔案,沒有說把那裡面的檔案加入工程.)
(若不設定,編譯報錯:無法開啟***檔案)。

2.載入dll

將dll檔案拷貝到工程debug檔案下(如果不拷貝,編譯連結不報錯,執行報錯:無法找到***.dll)

 或者在系統環境變數中加入dll檔案的路徑(...\bin)

3.DLL與LIB檔案的區別

lib是一個二進位制檔案,與dll類似,供其他程式呼叫。lib與dll的區別是:dll是執行時需要的,lib是編譯時需要的。

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

共有兩種連結方式:
  動態連結使用動態連結庫,允許可執行模組(.dll檔案或.exe檔案)僅包含在執行時定 位DLL函式的可執行程式碼所需的資訊。
  靜態連結使用靜態連結庫,連結器從靜態連結庫LIB獲取所有被引用函式,並將庫同程式碼一起放到可執行檔案 中。

關於lib和dll的區別如下:
  (1)lib是編譯時用到的,dll是執行時用到的。如果要完成原始碼的編譯,只需要 lib;如果要使動態連結的程式執行起來,只需要dll。
  (2)如果有dll檔案,那麼lib一般是一些索引資訊,記錄了dll中函式的入口和位 置,dll中是函式的具體內容;如果只有lib檔案,那麼這個lib檔案是靜態編譯出來的,索引和實現都在其中。使用靜態編譯的lib檔案,在執行程式時 不需要再掛動態庫,缺點是導致應用程式比較大,而且失去了動態庫的靈活性,釋出新版本時要釋出新的應用程式才行。
  (3)動態連結的情況下,有兩個 檔案:一個是LIB檔案,一個是DLL檔案。LIB包含被DLL匯出的函式名稱和位置,DLL包含實際的函式和資料,應用程式使用LIB檔案連結到DLL 檔案。在應用程式的可執行檔案中,存放的不是被呼叫的函式程式碼,而是DLL中相應函式程式碼的地址,從而節省了記憶體資源。DLL和LIB檔案必須隨應用程式 一起發行,否則應用程式會產生錯誤。如果不想用lib檔案或者沒有lib檔案,可以用WIN32 API函式LoadLibrary、GetProcAddress裝載。

使用lib需注意兩個檔案:
  (1).h標頭檔案,包含 lib中說明輸出的類或符號原型或資料結構。應用程式呼叫lib時,需要將該檔案包含入應用程式的原始檔中。
  (2).LIB檔案,略。

使用dll需注意三個檔案:
  (1).h標頭檔案,包含dll中說明輸出的類或符號原型或資料結構的.h檔案。應用程式呼叫dll時,需要將該檔案包含 入應用程式的原始檔中。
  (2).LIB檔案,是dll在編譯、連結成功之後生成的檔案,作用是當其他應用程式呼叫dll時,需要將該檔案引入應用 程式,否則產生錯誤。如果不想用lib檔案或者沒有lib檔案,可以用WIN32 API函式LoadLibrary、GetProcAddress裝載。
  (3).dll檔案,真正的可執行檔案,開發成功後的應用 程式在釋出時,只需要有.exe檔案和.dll檔案,並不需要.lib檔案和.h標頭檔案