1.加載lib/頭文件
分兩種方法:
(1)適用於當前項目
1 第一步:項目->屬性->C/C++->常規->附加包含目錄(瀏覽.h文件的路徑,包括所要添加的lib文件和dll文件路徑)添加包含文件
2 第二步:項目->屬性->C/C++->鏈接器->輸入->附加依賴項(寫入lib的名稱) 添加庫文件
3 第三部:項目->屬性->C/C++->鏈接器->輸入->附加依賴項,添加用到的lib
4 第四步:在要使用cpp文件前加入 #include <gtest/gtest.h>(注意文件的路徑)
這一步也可以在代碼中顯式調用 #pragma comment(lib, “***.lib”) ,若不添加,連接報錯:無法解析的外部符號
(2)適用於所有項目,設置好后即使重建新項目也不需重新設置。
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路徑
這些路徑只告訴編譯器怎么找文件,沒有說把那里面的文件加入工程.若不設置,編譯報錯:無法打開***文件。
- 加載dll
將dll文件拷貝到工程debug文件下(如果不拷貝,編譯鏈接不報錯,運行報錯:無法找到***.dll)
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頭文件