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標頭檔案