很多时候我们使用的第三方库都是以dll形式提供的,大部分情况下我们可以直接使用,不过有的时候我们可能也需要将.dll
导出为.lib
文件。
在Windows下编程的同学,可能都知道可以使用Depends
这个工具来查看dll依赖项和导出符号,却很少知道在命令行下,还有几个其他很好用的命令,分别是dumpbin和lib,这是vs安装目录下的两个程序。
1. dumpbin
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文件格式来的,需要我们手动调整:
上面的导出的lua54_nouse.def
不是按照def文件格式标准来的,不要用此工具来导DEF
文件。请使用如下的pexport
工具。
2. pexport
这里我们介绍另一款工具: pexport。可以从这里下载pexports
这是mingw项目下的一款工具。使用方式如下:
3. lib
接下来就是使用lib命令,制作对应的lib文件了。其基本使用方法如下:
例如:
# lib /def:xxx.def /machine:x86 out/:xxx.lib
或
# lib /def:xxx.def /machine:x64 out/:xxx.lib
以上分别为提取x86
、x64
位的引入库文件;out为可选项,若忽略,则生成的lib引入库文件的名称同def文件名。
至此,我们就可以在MSVC编译器中,使用
即可直接调用头文件中声明的函数了。
[参看]:
-
通过dll或def文件提取lib导入库文件
-
dll导出def和lib文件