dll导出def和lib文件

在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项目下的一款工具

使用命令

pexport -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")

即可直接调用头文件中声明的函数了。

猜你喜欢

转载自blog.csdn.net/GG_SiMiDa/article/details/81742924