我正在将 Facade DLL 用于静态库。 Dll 提供了一个小型接口和资源管理,可以在多个 DLL 之间共享。 Dll-Header 确实公开了静态库中的内容:
class DLL_EXPORT MyDllClass {
public:
/// ...
OneStaticLibClass * ptr;
};
问题是:如果这可行的话我必须链接静态库DLL 和使用 DLL 的应用程序。我没能导出部分内容静态库正确。我在导出标题中尝试过:
class DLL_EXPORT OneStaticLibClass;
但这不起作用...我仍然得到:
undefined reference to OneStaticLibClass::~OneStaticLibClass(void)
undefined reference to OneStaticLibClass::operator<<(char const *)
Andy 的想法是如何使用 DLL 导出部分静态库?
谢谢你!
您将需要创建一个 .def 文件并将其传递给链接器。在这种情况下,不需要 DLLEXPORT。
其原因是使用静态库时解析符号的方式。创建 DLL 时,仅搜索 DLL 本身所需的符号,并将包含这些符号的目标文件复制到 DLL 中。如果 DLL 代码没有引用您的析构函数,则不会包含它。
.def 文件将告诉链接器导出哪些函数。将从静态库中搜索并提取导出的函数。
此过程的一个缺点是您需要在 .def 文件中使用损坏的 C++ 名称。可以使用 dumpbin 实用程序获取损坏的名称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)