dll导出def和lib文件
程序员文章站
2022-03-04 19:04:04
...
在Windows下编程的同学,可能都知道可以使用Depends这个工具查看dll依赖项和导出符号,
却很少知道在命令行下,有两个更好用的命令,分别是dumpbin和lib,这是VS安装目录下的两个程序。
dumpbin
用法: DUMPBIN [选项] [文件]
选项:
/ALL
/ARCHIVEMEMBERS
/CLRHEADER
/DEPENDENTS
/DIRECTIVES
/DISASM[:{BYTES|NOBYTES}]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/EXPORTS
/FPO
/HEADERS
/IMPORTS[:文件名]
/LINENUMBERS
/LINKERMEMBER[:{1|2}]
/LOADCONFIG
/NOLOGO
/OUT:filename
/PDATA
/PDBPATH[:VERBOSE]
/RANGE:vaMin[,vaMax]
/RAWDATA[:{NONE|1|2|4|8}[,#]]
/RELOCATIONS
/SECTION:名称
/SUMMARY
/SYMBOLS
/TLS
/HEADERS可以查看dll的位数X86/X64,有哪些SECTION;
/DEPENDENTS可以查看依赖项,这和可视化工具Depends功能一样;
/EXPORTS xxx.dll查看导出符号,即dll中包含哪些函数;
/IMPORTS xxx.dll查看从依赖项中具体需要导入的函数;
/LINKERMEMBER xxx.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
pexport
这里我们介绍另一款工具,pexport
下载地址http://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports
这是mingw项目下的一款工具
使用命令
pexports -o xxx.dll > xxx.def
即可直接导出标准的def文件
lib
接下来就是使用lib命令,制作对应的lib文件了
用法: LIB [选项] [文件]
选项:
/DEF[:文件名]
/ERRORREPORT:{NONE|PROMPT|QUEUE|SEND}
/EXPORT:符号
/EXTRACT:成员名
/INCLUDE:符号
/LIBPATH:目录
/LIST[:文件名]
/LTCG
/MACHINE:{ARM|ARM64|EBC|X64|X86}
/NAME:文件名
/NODEFAULTLIB[:库]
/NOLOGO
/OUT:文件名
/REMOVE:成员名
/SUBSYSTEM:{BOOT_APPLICATION|CONSOLE|EFI_APPLICATION|
EFI_BOOT_SERVICE_DRIVER|EFI_ROM|EFI_RUNTIME_DRIVER|
NATIVE|POSIX|WINDOWS|WINDOWSCE}[,#[.##]]
/VERBOSE
/WX[:NO]
lib /DEF:xxx.def /MACHINE:X64 /OUT:xxx.lib
至此,我们就可以在MSVC编译器中,使用
#pragma comment(lib, "xxx.lib")
即可直接调用头文件中声明的函数了。
下一篇: 全方位解读DLL文件—调用DLL