dll匯出def和lib檔案

2021-08-24 17:52:49 字數 2792 閱讀 9033

在windows下程式設計的同學,可能都知道可以使用depends這個工具檢視dll依賴項和匯出符號,

卻很少知道在命令列下,有兩個更好用的命令,分別是dumpbin和lib,這是vs安裝目錄下的兩個程式。

用法: dumpbin [選項] [檔案]

選項:/all

/archivemembers

/clrheader

/dependents

/directives

/disasm[:]

/errorreport:

/exports

/fpo

/headers

/imports[:檔名]

/linenumbers

/linkermember[:]

/loadconfig

/nologo

/out:filename

/pdata

/pdbpath[:verbose]

/range:vamin[,vamax]

/rawdata[:[,#]]

/relocations

/section:名稱

/summary

/symbols

/tls

/headers可以檢視dll的位數x86/x64,有哪些section;

/dependents可以檢視依賴項,這和視覺化工具depends功能一樣;

/exports ***.dll檢視匯出符號,即dll中包含哪些函式;

/imports ***.dll檢視從依賴項中具體需要匯入的函式;

/linkermember ***.lib則可以檢視靜態導入庫中匯入了哪些函式;

這裡我們要製作dll對應的lib靜態匯入檔案,就需要先產生def檔案

由/exports選項即可檢視,但顯示的資訊不是按照def檔案格式來的,需要我們手動調整;

dump of file libreadface.dll

file type: dll

section contains the following exports for libreadface.dll

00000000 characteristics

5b740fad time date stamp wed aug 15 12:34:05 2018

0.00 version

1 ordinal base

45 number of functions

45 number of names

ordinal hint rva name

1 0 00002780 releasefacedetectresult

2 1 000028f0 releasefacetrackresult

3 2 00007820 rsgetcroppedfacebytrackid

4 3 00002930 rsgetfacequalityscore

5 4 000079e0 rsgetrsfacesdkversion

6 5 00001df0 rsgetsdklicensedevicekey

7 6 000042b0 rsinitattributedetect

8 7 000079b0 rsinitdepthlivenessdetect

9 8 00007540 rsinitfacecrop

10 9 00002710 rsinitfacedetect

11 a 00002910 rsinitfacequality

12 b 00004ff0 rsinitfacerecognition

13 c 000027e0 rsinitfacetrack

14 d 00001e00 rsinitlicensemanager

15 e 00006460 rsinitlivenessdetect

16 f 00002850 rsinitsinglefacetrack

這是mingw專案下的一款工具

使用命令

pexports -o ***.dll  > ***.def
即可直接匯出標準的def檔案

接下來就是使用lib命令,製作對應的lib檔案了

用法: lib [選項] [檔案]

選項:/def[:檔名]

/errorreport:

/export:符號

/extract:成員名

/include:符號

/libpath:目錄

/list[:檔名]

/ltcg

/machine:

/name:檔名

/nodefaultlib[:庫]

/nologo

/out:檔名

/remove:成員名

efi_boot_service_driver|efi_rom|efi_runtime_driver|

native|posix|windows|windowsce}[,#[.##]]

/verbose

/wx[:no]

lib /def:***.def /machine:x64 /out:***.lib
至此,我們就可以在msvc編譯器中,使用

#pragma comment(lib, "***.lib")
即可直接呼叫標頭檔案中宣告的函式了。

使用Def檔案匯出Dll檔案

本文介紹如何使用def檔案製作dll。模組定義 def 檔案是包含乙個或多個描述 dll 各種屬性的 module 語句的文字檔案。如果不使用 declspec dllexport 關鍵字匯出 dll 的函式,則 dll 需要 def 檔案。def 檔案必須至少包含下列模組定義語句 步驟 1.新建乙...

使用Def檔案匯出Dll檔案

本文介紹如何使用def檔案製作dll。模組定義 def 檔案是包含乙個或多個描述 dll 各種屬性的 module 語句的文字檔案。如果不使用 declspec dllexport 關鍵字匯出 dll 的函式,則 dll 需要 def 檔案。def 檔案必須至少包含下列模組定義語句 步驟 1.新建乙...

從DLL匯出LIB檔案

q 從動態鏈結庫dll檔案匯出lib檔案 詳情 常見的還有libcurl庫含有.a檔案,沒有lib檔案。解決 使用virsual studio自帶工具dumpbin.exe和lib.exe進行處理即可得到lib檔案。步驟如下 1,首先檢查dump.exe所在目錄是否在計算機的 環境變數 path 裡...