现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

VS20XX使用DEF文件来生成DLL与Lib

2012-10-09 20:10 工业·编程 ⁄ 共 1014字 ⁄ 字号 评论 1 条

在程序使用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 中都输入该项才行.

目前有 1 条留言    访客:0 条, 博主:0 条 ,引用: 1 条

    外部的引用: 1 条

    • 从def文件得到lib文件 « 求索阁

    给我留言

    留言无头像?