在程序使用Dll有两个加载方式,一种是动态方式,就是LoadLibrary载入Dll,然后用GetProcAddress来加载需要使用的Dll函数。另一种就是静态连接方式,将dll生成的lib,加入到工程中,然后使用时就像使用Win API一样使用。
今天我们不讨论动态载入的方式,我们采用静态载入的方式。但有一个问题,由于很多Dll发布的时候,根本就不提供lib,也或许你在使用一个未公开的dll,没有lib我们就不能静态加载,我手工来生成吧。
手工生成
可以使用PE解析器
或者dumpbin获取此Dll所有导出函数,然后将这些导出函数名复制出来,新一个xxx.def文件,其中的xxx为你的dll文件名,格式如下:
EXPORTS
sqlite3_aggregate_context
sqlite3_aggregate_count
sqlite3_auto_extension
sqlite3_backup_finish
sqlite3_backup_init
sqlite3_backup_pagecount
sqlite3_backup_remaining
sqlite3_backup_step
sqlite3_bind_blob
sqlite3_bind_double
sqlite3_bind_int
sqlite3_bind_int64
将xxx.dll和xxx.def,放到一个文件夹中,启动“Visual Studio 2005 命令提示”,位置:
“开始”->”Microsoft Visual Studio 2005″ -> “Visual Studio Tools” -> “Visual Studio 2005 命令提示”
将工作目录切换到放有xxx.dll和xxx.def的文件夹中输入:
lib /def:xxx.def /MACHINE:x86
这样将会产生一个xxx.lib了,将此lib文件和dll文件拷到工程中,就可以进行静态链接了。
IDE
生成
VS2005使用DEF文件来生成DLL与Lib时,与VC6的设置是不一样的。
VC6工程中,只要有DEF文件并将其添加到工程中,VC6就可以自动地生成DLL与其相应的Lib文件了。
但是VS2005不一样,需要指定DEF文件,方法如下:
把 sqlite.def 添加到工程中.
选择 工程 > 属性中的链接器,然后找到"输入"这一项. 在 "模块定义文件" 中输入
sqlite.def。
注意: 你需要在 Debug 和 Release 中都输入该项才行.
分享到:
相关推荐
BCB由DLL生成LIB及def文件方法,而非转换VC的lib文件,这样生成的lib文件包含DLL中函数最全,
使用 visual studio command prompt命令窗口,执行如下命令:lib /def:libvlc.def /out:libvlc.lib /
MinGW 之 (lib,dll,def,obj,exe) vs (a,dll,def,o,exe) 玩转攻略手记 一份粗糙的研究记录,有待补完和整理。 MinGW: c -> o gcc -c a.c c -> exe gcc a.c libs.o -o a.exe (从主程序a.c,附加libs,生成a.exe) o -...
在win32 sdk 命令提示符下用def文件构建dll,虽然简单,但是该有的步骤都说明了。高手请多提意见。
选择DLL文件,自动生成DEF文件和LIB文件
Windows上编译的libx264(源码+生成DLL、lib、def),没有依赖项,不想自己配置环境编译代码的人可以拿去用。
DLL生成LIB的工具箱。里面包含两个工具,一个工具快速生成DEF和LIB文件,另一个工具修改LIB文件的函数命名方式。
5)在命令窗内运行命令进入sqlite-dll-win32-x86-3070500文件夹6)执行LIB /DEF:SQLITE3.DEF /MACHINE:IX86或LIB /DEF:SQLITE3.DEF 即可生成sqlite3.lib文件。7)执行LIB /DEF:SQLITE3.DEF /MACHINE:X64即可生成64位...
C++Builder 的链接器在链接 DLL 时需要导入库(Import Library),在有些情况下,只能得到 DLL 文件,而没有导入库文件(比如用 Delphi 开发的 DLL),使用这个工具可以方便的生成 DLL 对应的导入库和模块定义文件DEF...
CppDLL v1.1 is a small tool that will help you generate Cpp Header(.h) and Import Library(.lib) from Dynamic Link Library(.dll). Author: rrrfff Blog: http://blog.csdn.net/rrrfff
该python脚本对一个 A.dll 文件会生成如下三个文件: A.lib A.def A.exp 因为是 python 写的,所以需要下载 python (目前为 2.7 ,不要使用 3.X 版的,因为 3.X 版认为 print "string" 是语法错误的) ----------...
从dll中导出lib的工具。可用于win7 64位系统。 命令格式如下:pexports XX.dll > XX.def
VC++ 和 C++Builder 的链接器在链接 DLL 时需要导入库(Import Library),在有些情况下,只能...如用 Delphi 开发的 DLL),使用这个工具可以方便的生成 DLL 对应的 导入库和模块定义文件DEF(module-definition file)。
WINDOWS下的GMP大数库的LIB,DLL,DEF文件
sqlite3.dll,sqlite3.lib,sqlite3.h,sqlite3.def等库文件
两个工具,一个工具为查看dll的接口;另外一个工具可以将dll文件得到它的导入库lib和接口的def文件。很多时候只有dll文件,没有lib导入库和def文件时,这个工具很好用。
使用方法,将pexports.exe放到X:\Microsoft Visual Studio X.0\VC\bin目录下,在命令行里输入pexports x.dll > x.def 然后在输入lib /machine:ix86 /def:x.def 即在当前目录生成x.lib 执行之前可能需要运行vcvars32...
使用MinGW编译一份库代码,可能是由于configure不好,导致只能生成.a文件,google发现一些方法,备份一下。
有时候我们只有动态库,但是想得到静态库就可以使用这个工具。具体命令如下: 步骤一:pexports *.dll > *3.def 步骤二:LIB /machine:X86 /DEF:*.def