从 DLL 导出静态库符号
Exporting static lib symbols from DLL
我正在使用外观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++名称。可以使用转储站实用程序获得损坏的名称。
相关文章:
- 使用gcc从静态链接的文件中查找可选符号
- 链接器找不到在虚拟类 c++ 中访问的静态字段的符号
- 如果我想链接静态库并删除未使用的符号.txt我应该如何处理 Cmakelist
- 限制静态库中符号的可见性 (MSVC/Visual C++)
- 仅在少数方法(静态或共享库)中解析的外部符号
- MSVC2019 静态库中缺少符号名称
- 使用静态 constexpr 成员的未解析外部符号
- 协议缓冲区的静态链接会导致与现有符号冲突
- ctypes,添加静态库时未定义的符号
- 在Qt5上去静态库:架构的未定义符号x86_64:
- 为什么链接器报告全局函数的乘法定义符号,而不是类静态方法
- 覆盖性静态分析说无符号的int是char(C++)
- 作为成员的静态类模板实例会导致未解析的外部符号错误
- DLL 链接静态库 - 未使用函数中未解析的链接器符号
- 如何防止静态库中的重复符号?
- CURL 静态链接未解析的外部符号
- 动态库没有静态库文件的符号
- 使用静态变量未解析的外部符号/未定义的引用时出错
- 未解析的外部符号静态变量(标头中定义的方法使用的变量)
- 奇怪的无符号静态常量不是类模板中的常量表达式