天天看點

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll

靜态庫:函數和資料被編譯進一個二進制檔案,通常擴充名為.lib,在使用靜态庫的情況下,在編譯連結可執行檔案時,連結器從庫中複制這些函數和資料并把它們和應用程式的其它子產品組合起來建立最終的可執行檔案。

動态庫:往往提供2個檔案,一個是引入庫和一個DLL,引入庫包含被DLL導出的函數和變量的符号名,DLL包含實際的函數和資料。在編譯連結可執行檔案時,隻需要連結引入庫,DLL中的函數代碼和資料并不複制到可執行檔案中,在運作的時候,再去加載DLL,通路DLL中導出的函數。

使用DLL的好處:1.可以采用多種程式設計語言來編寫;2.增強産品的功能;3.提供二次開發的平台;4.簡化項目管理,同時進行開發;5.可以節省磁盤空間和記憶體,多個程式使用同一種資源;6.有助于資源的共享;7.有助于實作應用程式的本地化。

動态連結庫的加載兩種方式:

隐式連結:

①建立DLL的程式,在裡面建立加法和減法兩個函數;

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

 編譯後打開工程下的DEBUG檔案夾,可以看到生成的dll檔案;

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

打開Cmd指令床開,切換到此路徑下(複制檔案路徑,在指令視窗裡右鍵即粘貼),輸入dumpbin -exports Dll1.dll,可以看到該DLL導出的資訊,如果dumpbin指令不識别,需要添加環境變量(我的安裝路徑是:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.23.28105\bin\Hostx64\x64)

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

 我們重新回到代碼中,在每個函數名前增加_declspec(dllexport),再重新編譯生成,發現生成的檔案中多了一個Dll1.lib檔案,這就是前面說的引入庫檔案;

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

 接着再重新運作cmd指令,可以看到我們導出的函數資訊,因為c++具有重載功能,是以函數命名會按編譯器内部辨別的一堆符号顯示。

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

 測試一下結果:重新建立C++控制台程式,調用Add和Sub函數,在屬性裡附加庫依賴項加入Dll1.lib,并把檔案(Dll1.lib和Dll1.dll)複制到該目錄下;

紅色圈起來的是表明函數在外部定義,第一種效率比下面的高。

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

 同樣可以使用dumpbin檢視測試程式的輸入檔案資訊

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends

檢視程式依賴的動态庫—dumpbin和depends

dumpbin是VS自帶的工具,進入Visual Studio 2010 的指令提示

檢視程式或動态庫所依賴的動态庫

dumpbin /dependents  abc.exe

檢視動态庫的輸出函數

dumpbin /exports abc.dll

另一款檢視動态庫依賴的小工具depends,官網http://www.dependencywalker.com/

VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends
VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends
VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends
VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends
VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends
VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends
VS2019 C++動态連結庫的建立使用(1) - 建立使用dll VS2019 C++動态連結庫的建立使用(1) - 建立使用dll檢視程式依賴的動态庫—dumpbin和depends