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

使用命令

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

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

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
### 回答1: makeexport dll导出lib是一个非常常见的操作。一般来说,这是因为我们需要将一个动态链接库中的函数导出到一个静态链接库中,以供其他代码使用。这个过程需要使用一些工具,主要有两个,分别是makeexports和lib。 首先,我们需要使用makeexports工具来生成一个.def文件,该文件列出了我们想要导出的函数和它们在库中的名称。然后,我们可以使用lib工具将这些导出函数生成为一个静态链接库。这个过程确保了我们可以使用这些函数而不需要动态加载它们。 makeexports工具和lib工具都是微软Visual Studio开发环境自带的工具,可以在命令行中使用。如果你使用的是其他编译器或开发环境,则可以使用类似的工具来实现相同的目的。 总的来说,将动态链接库导出为静态链接库是一个重要的操作,使我们可以将函数共享给其他代码而不需要它们运行时被动态加载。 ### 回答2: makeexport是一个工具,用于从动态链接库(DLL)中导出函数。这个工具可以通过在命令行中指定DLL导出函数列表来生成一个LIB文件,这个LIB文件包含DLL导出函数的符号和地址信息,以便在链接期间使用。 如果你需要使用某个DLL中的函数,但是没有相应的头文件LIB文件,那么你可以使用makeexport工具来生成一个LIB文件。具体操作步骤如下: 1. 下载makeexport工具; 2. 在命令行中运行makeexport,并指定需要生成LIB文件DLL以及导出函数列表; 3. 执行完命令后,会在当前目录下生成一个LIB文件; 4. 将LIB文件添加到你的项目中,以便在链接期间使用。 需要注意的是,使用makeexport工具生成的LIB文件只包含DLL中指定的导出函数。如果你需要使用DLL中其他的函数,你需要使用其他工具或手动编写相应的头文件LIB文件。 总的来说,使用makeexport工具来生成LIB文件可以方便地使用DLL中的函数,但是需要注意生成的LIB文件不一定包含所有函数信息。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ithewei

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值