如果每个静态lib定义导出的功能(vc 2008),如何将多个静态链接库合并到一个dll中?
在单个dll项目中存在的多项目布局和静态链接的多个子项目(在dll项目中) . 尽管标记为__declspec(导出),但子项目(.lib)中的某些符号拒绝将其符号导出到最终的dll中 .
生成.def文件并明确标记符号以进行导出可以解决此问题 . 但是,确定哪些符号标记为__declspec(导出)可以证明问题 . 由于大量的导出类/函数和主要名称修改手工维护列表是一个不可靠的过程,因此生成标记为导出的符号列表将是唯一可行的选项 .
是否有实用程序或编译器指令可以执行此操作?
2 回答
使用DEF文件 .
始终使用DEF文件 .
永远不会使用DEF文件 .
只需接受DEF文件即可使用 .
停止使用__declspec(dllexport),并使用dang-dratted def文件 .
也不要导出类 . 导出仅需要导出的类成员 . 并使用DEF文件来执行此操作 .
说真的,如果导出没有DEF文件的类,函数名将比实际程序数据长几倍 . 您应该使用序数来导出C成员函数 .
经过反复试验,我发现使用lib / def命令可以生成导入库和导出文件 . 导出文件似乎包含所有用__declspec(dllexport)标记的符号 . 随后可以使用dumpbin检查.exp文件,并将其用作生成模块定义文件的引用 .