我正在使用Facade DLL到静态库。 Dll提供了一个小的接口和资源管理,可以在多个DLL之间共享。 Dll-Header确实暴露了静态库中的东西:
class DLL_EXPORT MyDllClass {
public:
/// ...
OneStaticLibClass * ptr;
};
问题是:如果这应该可行,我将使用DLL将 StaticLib 链接到DLL和应用程序。我无法正确导出部分 StaticLib 。我尝试了导出标题:
class DLL_EXPORT OneStaticLibClass;
但这不起作用......我仍然得到:
undefined reference to OneStaticLibClass::~OneStaticLibClass(void)
undefined reference to OneStaticLibClass::operator<<(char const *)
Andy想法如何用DLL导出部分静态库?
谢谢!
答案 0 :(得分:3)
您需要创建.def文件并将其传递给链接器。在这种情况下,不需要DLLEXPORT。
原因是使用静态库时解析符号的方式。创建DLL时,仅搜索DLL本身所需的那些符号,并将包含这些符号的目标文件复制到DLL中。如果DLL代码没有引用析构函数,则不会包含它。
.def文件将告诉链接器导出哪些函数。将从静态库中搜索和提取导出的函数。
此过程的一个缺点是您需要在.def文件中使用受损的C ++名称。可以使用dumpbin实用程序获取已命名的名称。