4

我将 Facade DLL 用于静态库。Dll 提供了一个小型接口和资源管理,可在多个 DLL 之间共享。Dll-Header 确实公开了静态库中的内容:

class DLL_EXPORT MyDllClass {
public:
   /// ...
   OneStaticLibClass * ptr;
};

问题是:如果这可行,我必须将StaticLib链接到 DLL 和使用 DLL 的应用程序。我没有设法正确导出部分StaticLib。我在导出标题中尝试过:

class DLL_EXPORT OneStaticLibClass;

但这不起作用......我仍然得到:

undefined reference to OneStaticLibClass::~OneStaticLibClass(void)
undefined reference to OneStaticLibClass::operator<<(char const *)

Andy 想到如何使用 DLL 导出静态库的一部分?

谢谢!

4

1 回答 1

3

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

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

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

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

于 2013-09-04T08:29:36.293 回答