使用VS2005,我想创建一个DLL并自动导出所有符号,而无需在各处添加__declspec(dllexport)且无需手动创建.def文件。请问这是一种方法吗?
3 回答
温温酱
TA贡献1752条经验 获得超4个赞
可以办到...
我们在这里做的方法是使用链接器的/ DEF选项来传递包含出口列表的“模块定义文件”。我从您的问题中了解到您了解这些文件。但是,我们不是手工完成的。导出列表本身是由dumpbin / LINKERMEMBER命令创建的,并通过简单的脚本将输出操纵为模块定义文件的格式。
设置需要很多工作,但是它允许我们编译在Windows上没有Unix的dllexport声明的情况下创建的代码。
浮云间
TA贡献1829条经验 获得超4个赞
我编写了一个小程序来解析.lib文件中“ dumpbin / linkermember”的输出。我有超过8,000个函数引用要从一个DLL导出。
在DLL上执行此操作的问题在于,必须一次链接没有导出定义的DLL才能创建.lib文件,然后生成.def,这意味着您现在必须再次将DLL与.def文件重新链接为实际导出参考。
使用静态库更容易。将所有源代码编译为静态库,运行dumbin,使用小程序生成.def,然后在导出名称可用的情况下将库链接到DLL中。
不幸的是,我的公司不允许我向您显示来源。所涉及的工作是识别def文件中转储输出中不需要哪些“公共符号”。您必须丢弃很多引用,NULL_IMPORT_DESCRIPTOR,NULL_THUNK_DATA,__imp *等。
添加回答
举报
0/150
提交
取消