从 DLL 导出静态库符号

Exporting static lib symbols from DLL

本文关键字:符号 静态 DLL      更新时间:2023-10-16

我正在使用外观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 导出静态库的部分?

谢谢!

您需要创建一个 .def 文件并将其传递给链接器。在这种情况下,DLL导出不是必需的。

原因是使用静态库时解析符号的方式。创建 DLL 时,仅搜索 DLL 本身所需的那些符号,并将包含这些符号的对象文件复制到 DLL 中。如果 DLL 代码未引用析构函数,则不会包含它。

.def 文件将告诉链接器导出哪些函数。导出的函数将被搜索并从静态库中提取。

此过程的一个缺点是您需要在 .def 文件中使用损坏的C++名称。可以使用转储站实用程序获得损坏的名称。