gpt4 book ai didi

c++ - 从 DLL 导出静态库符号

转载 作者:塔克拉玛干 更新时间:2023-11-03 02:03:13 28 4
gpt4 key购买 nike

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

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

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

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 实用程序获取损坏的名称。

关于c++ - 从 DLL 导出静态库符号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18608695/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com