从 DLL 导出静态 lib 符号

2024-03-05

我正在将 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(使用前将#替换为@)

从 DLL 导出静态 lib 符号 的相关文章

随机推荐

  • 添加 2 级索引作为带有条件的其他索引的总和

    我有一个df df pd DataFrame from dict group 0 A 1 A 2 A 3 A 4 A 5 A 6 A 7 A 8 A 9 B 10 B 11 B 12 B 13 B 14 B 15 B 16 B 17 B 1
  • 重新初始化 ScheduledExecutorService 中的修复延迟

    根据我的要求 我必须在一段时间后执行一些特定的代码 我选择做同样的事ScheduledExecutorService scheduleWithFixedDelay runnable 0 5 TimeUnit SECONDS 它对我来说工作得
  • Pandas DataFrame 列命名约定

    有没有常用的 Pandas DataFrame 列命名约定 是PEP8 https www python org dev peps pep 0008 在这里推荐 例如实例变量 意识到大量数据是从带有标题的外部源加载的 但我很好奇当我必须自己
  • 使用 R 文本挖掘包保留土耳其语字符

    首先我要说的是 我仍然是 R 的初学者 目前 我正在使用 tm 包尝试土耳其语文本的基本文本挖掘技术 然而 我在 R 中显示土耳其语字符时遇到了问题 这就是我所做的 docs lt VCorpus DirSource DIRECTORY e
  • Cordova / Phonegap:实时更新代码库

    我们将 Cordova 与 AngularJS 一起用于 iOS 和 Android 应用程序 iOS 的一大缺点是 Apple 的审核时间较长 在 Google 的 Playstore 中 您的应用程序几乎可以立即或在几个小时内可用 但苹
  • 可以信任第三方主机进行闭源/私有源代码管理吗? [关闭]

    Closed 这个问题是与编程或软件开发无关 help closed questions 目前不接受答案 对于许多公司来说 他们项目的源代码对他们来说非常有价值 窃取源代码可能会造成非常高昂的代价 在本地网络上严格控制源代码是帮助保护源代码
  • npm 依赖冲突

    我正在使用 Vue 开发一个项目 我运行 Vue Cli 并添加了 Typescript 插件 我有几个弱点 当我跑步时npm audit fix它无法解决依赖冲突 npm ERR code ERESOLVE npm ERR ERESOLV
  • Airflow连接密码解密

    我想解密气流连接的密码 从连接表中获取值 有什么方法可以解密密码值 你可以做 from airflow hooks base hook import BaseHook connection BaseHook get connection c
  • Material-ui 芯片 - 拖放支持

    我想用材料 UI 芯片 https material ui com demos chips 在我的反应应用程序中 问题是我想通过拖放来移动芯片 不支持此功能material ui 是否有解决方法 扩展来使芯片可拖动 如果没有其他办法的话 我
  • Android 库项目作为 jar 文件进行分发,例如 google Analytics

    我见过this https stackoverflow com questions 5014128 create an android jar library for distribution问题 并且对创建一个我可以分发并可以在任何 An
  • 按天自动分区 - PostgreSQL

    我想做一个日常分区 我知道oracle是这样的 CREATE TABLE PUBLIC TEST ID NUMBER 38 0 NOT NULL ENABLE SOME FIELD VARCHAR2 20 BYTE NOT NULL ENA
  • Puppeteer:如何聆听特定的回应?

    我正在修补名为的无头 chrome 节点 apipuppeteer 我想知道如何听取特定的请求响应以及如何采取行动 我已经查看了事件requestfinish and response但它给了我all页面中已执行的请求 响应 我怎样才能实现
  • 意图在android中拍摄视频

    我需要仅使用前置摄像头从我的应用程序中拍摄视频 我正在使用意图来执行此操作 Intent intent new Intent MediaStore ACTION VIDEO CAPTURE intent putExtra MediaStor
  • 在 JBehave Web 中运行 FirefoxWebDriverProvider 时如何更改浏览器窗口的大小

    我们正在使用 JBehave Web 来驱动新项目的 selenium 测试套件 并且非常喜欢 JBehave 上提供的 Etsy com 示例 尤其是 Java Spring maven 原型 因为这适合我们的架构 到目前为止最大的问题是
  • 如何将表转储到控制台?

    我在显示包含嵌套表 n 深 的表的内容时遇到问题 我想通过 a 将它转储到标准输出或控制台print声明或一些快速而肮脏的东西 但我不知道如何 我正在寻找打印时得到的粗略等价物NSDictionary使用gdb 如果需求是 又快又脏 我发现
  • 无法导入名称“BlockBlobService”

    我收到以下错误 from azure storage blob import BlockBlobService ImportError cannot import name BlockBlobService 当尝试使用命令提示符运行我的 p
  • MongoDB $lookup 值返回数组

    我有一个包含多个项目的文档 需要从另一个集合中查找更多信息来填写数据 主要文件 id ObjectID 5a30ff41af58f911946b122e SalesItems SalesItemID 1139 Quantity 2 Amou
  • 为 C++ 多维类指针创建初始化和删除函数

    我创建了一个类并使用多维指针 如下所示 variable v mod v mod new variable 3 for int i 0 i lt 3 i v mod i new variable n 并在使用后删除指针 for int i
  • 如何更改最新发布的 Visual Studio Code 中的默认浏览器?

    正如标题所说 默认浏览器是IE 但我想使用其他浏览器 我该怎么办 您可以将 Windows 默认设置程序更改为您的浏览器 Windows 7的 控制面板 gt 程序 gt 设置默认程序
  • 从 DLL 导出静态 lib 符号

    我正在将 Facade DLL 用于静态库 Dll 提供了一个小型接口和资源管理 可以在多个 DLL 之间共享 Dll Header 确实公开了静态库中的内容 class DLL EXPORT MyDllClass public OneSt