msvc下从dll文件创建lib

1.进入msvc命令控制台。
2.生成.def文件
通过pexports或微软编译环境自带的dumpbin.exe导出DLL对应的def文件
方法一: pexports .dll > .def
方法二: dumpbin /exports .dll > .def
其中***代表你的dll的文件名以及要生成的def的文件名。
我推荐使用pexports,因为它导出的def是标准的def格式,可在http://sourceforge.net/projects/mingw/files/MinGW/Extension/pexports/下载;而微软的dumpbin导出的def需要我们稍微修改为标准的格式。下图是pexports和dumpbin生成的def文件,如果你用dumpbin,则需要将其生成的def文件修改为pexports生成的def的格式。

A DEF file can be written manually extremely easy if you don‘t have one: You open the DLL in DependencyWalker (http://www.dependencywalker.com), select “Save As” -> “Text with Import/Export lists” and have the names and ordinals of all exported functions in a txt file like this:

Export Ordinal Hint Function Entry Point



[C ] 2 (0x0002) 1 (0x0001) gsasl_base64_from 0x000024F0
[C ] 3 (0x0003) 2 (0x0002) gsasl_base64_to 0x000024A0
[C ] 4 (0x0004) 3 (0x0003) gsasl_callback 0x000018B0
[C ] 5 (0x0005) 4 (0x0004) gsasl_callback_hook_get 0x00001900
[C ] 6 (0x0006) 5 (0x0005) gsasl_callback_hook_set 0x000018F0
[C ] 7 (0x0007) 6 (0x0006) gsasl_callback_set 0x000018A0
[C ] 8 (0x0008) 7 (0x0007) gsasl_check_version 0x00001870
[C ] 9 (0x0009) 8 (0x0008) gsasl_client_mechlist 0x00001E20
[C ] 10 (0x000A) 9 (0x0009) gsasl_client_start 0x00001F40
The rest is quickly done. Create a DEF file which has this format:

EXPORTS
gsasl_base64_from @2
gsasl_base64_to @3
gsasl_callback @4
gsasl_callback_hook_get @5
gsasl_callback_hook_set @6
gsasl_callback_set @7
gsasl_check_version @8
gsasl_client_mechlist @9
gsasl_client_start @10
gsasl_client_suggest_mechanism @11
The number behind the @ is the ordinal.

P.D: DependencyWalker can even undecorate cryptic names of C++ exports like

[email protected]@YGHHH@Z –> int Foo(int, int).
3.编辑.def为标准格式
4.生成.lib文件

lib /def:\you_path\DLL_Name.def  /machine:i386 /OUT:\you_path\DLL_Name.lib

msvc下从dll文件创建lib

时间: 2024-10-06 14:01:21

msvc下从dll文件创建lib的相关文章

WIndows下编译libexif-0.6.21,生成VS下可用的dll和lib

1.下载libexif-0.6.21.zip 下载地址是http://sourceforge.net/projects/libexif/files/libexif/0.6.21/ 2.解压libexif-0.6.21.zip 我解压到了d:\opensources\下 3.安装Mingw 下载地址是http://www.mingw.org/ 点击右上角的Download Installer 记得安装Msys 我的安装路径是:C:\MinGW 下面依次有如下文件夹: bin include lib

VS2008下WinRar源码生成dll和 lib总结

WinRar官方提供了源码(http://www.rarlab.com/rar_add.htm):如果自己想要修改里面的内容就要重新生成DLL和LIB,我在网上找了很多资料都没有说得很清楚.花一两天的时间才把他生成成功.网上的资料都给了一些误导,所以改了很久才完成.现在给出正确的步骤,给这方面的学习者提供一下思路. )建立一个空的win32 dll工程2)把.hpp和.cpp都添加到工程里3)从工程中移除不是删除arccmt.cpp.beosea.cpp.coder.cpp.model.cpp.

VS2010 C++环境下DLL和LIB文件目录及名称修改

DLL工程,Debug版本下输出文件由basetool.dll basetool.lib 改为basetoolD.dll basetoold.lib 需设置: 1.配置属性-常规-目标文件名 $(ProjectName) 加d 2.配置属性-连接器-常规-输出问件 由 加d 3.配置属性-连接器-高级-导入库,设置文件名$(OutDir)$ProjectName)d.lib 4.如果有导出文件,.def文件中也一定要修改导出库的名字 LIBRARY      "BaseTool" 变为

C++环境下DLL和LIB文件目录及名称修改

DLL工程,Debug版本下输出文件由basetool.dll basetool.lib 改为basetoolD.dll basetoold.lib 需设置: 1.配置属性-常规-目标文件名 $(ProjectName) 加d 2.配置属性-连接器-常规-输出问件 由 加d 3.配置属性-连接器-高级-导入库,设置文件名$(OutDir)$ProjectName)d.lib 4.如果有导出文件,.def文件中也一定要修改导出库的名字 LIBRARY      "BaseTool" 变为

基于Qt的动态库*.dll文件创建

有时候在做项目的时候我们需要将自己编写的类封装起来,Qt提供了一个很好的封装途径.下面将详细讲述一个简单的库的制作过程,最后再创建另外一个工程,在这个工程里面对封装的库进行调用,从而完成一个dll库从创建到调用的过程.谢谢大家指正! 第一步:先制作一个库文件. 1.首先新建一个工程,工程选项如下,我们要创建一个基于qmake的C++共享库. 2.选择库的类型和存放路径. 3.在"hellolib.cpp"中添加如下的代码,让库函数输出一行文字. 4.点击左下角的编译,如果没有错误就生成

MFC下的DLL编程学习

1.DLL库与LIB库对比: 静态链接库Lib(Static Link Library),是在编译的链接阶段将库函数嵌入到应用程序的内部.如果系统中运行的多个应用程序都包含所用到的公共库函数,则必然造成很大的浪费.这样即增加了链接器的负担,也增大了可执行程序的大小,还加大了内存的消耗.Lib的好处是应用程序可以独立运行,而不需要在操作系统中另外安装对应的DLL. 而DLL采用动态链接,对公用的库函数,系统只有一个拷贝(一般是位于系统目录的*.DLL文件),而且只有在应用程序真正运行阶段调用时,才

由动态库文件dll生成lib库文件

本文基于OpenBlas的编译和安装.来说明怎样从一个dll文件生成lib库文件. 參考OpenBlas的说明"Howto generate import library for MingW",和MinGW的说明HOWTO Create an ImportLibrary for a DLL using MinGW,学习怎样生成lib库.当中OpenBlas的说明讲的是怎样使用Visual studio的lib.exe工具从dll生成lib文件,而MinGW讲的是怎样把一个windows

加载dll、lib库

2.是关于如何加载dll或lib库的.可以看这篇bog   Qt调用dll中的功能函数点击打开链接 **************************************************************************************************************************************************** 声明: 事先我已经自己动手写了一个简单的dll文件(myDLL.dll),C版接口的.并且用我前两篇有

DLL和LIB的一些知识点(网上搜集)

关于lib和dll的区别如下:(1)lib是编译时用到的,dll是运行时用到的.如果要完成源代码的编译,只需要lib:如果要使动态链接的程序运行起来,只需要dll.(2)如果有dll文件,那么lib一般是一些索引信息,记录了dll中函数的入口和位置,dll中是函数的具体内容:如果只有lib文件,那么这个lib文件是静态编译出来的,索引和实现都在其中.使用静态编译的lib文件,在运行程序时不需要再挂动态库,缺点是导致应用程序比较大,而且失去了动态库的灵活性,发布新版本时要发布新的应用程序才行.(3