导出 DLL 中的静态数据

2024-03-08

我有一个 DLL,其中包含一个静态类members. I use __declspec(dllexport)为了利用这个类methods。但是,当我将其链接到另一个项目并尝试编译它时,我收到静态数据的“无法解析的外部符号”错误。

例如 在DLL中,Test.h

class __declspec(dllexport) Test{
protected:
    static int d;
public:
    static void m(){int x = a;}
}

在DLL中,Test.cpp

#include "Test.h"

int Test::d;

在使用 Test 的应用程序中,我调用 m()。

我还尝试分别对每个方法使用 __declspec(dllexport) ,但静态成员仍然出现相同的链接错误。

如果我使用 dumpbin 检查 DLL(.lib),我可以看到符号已被导出。

例如,应用程序在链接时出现以下错误:

1>Main.obj : error LNK2001: unresolved external symbol "protected: static int CalcEngine::i_MatrixRow" (?i_MatrixRow@CalcEngine@@1HA)

但 .lib 的 dumpbin 包含:

Version      : 0
  Machine      : 14C (x86)
  TimeDateStamp: 4BA3611A Fri Mar 19 17:03:46 2010
  SizeOfData   : 0000002C
  DLL name     : CalcEngine.dll
  Symbol name  : ?i_MatrixRow@CalcEngine@@1HA (protected: static int CalcEngine::i_MatrixRow)
  Type         : data
  Name type    : name
  Hint         : 31
  Name         : ?i_MatrixRow@CalcEngine@@1HA

我不知道如何解决这个问题。我究竟做错了什么?我怎样才能克服这些错误?

附:该代码最初是为 Linux 开发的,.so/binary 组合可以正常工作

编辑:在给定的情况下,静态变量不是由应用程序直接引用的,但该方法是内联的,因为它位于标头中。我能够通过将方法移至 .cpp 文件来解决链接错误。


In this http://cboard.cprogramming.com/cplusplus-programming/98673-static-variable-vs-dll.htmlcprogramming.com 上的线程建议静态变量是 dll 的本地变量并且不导出。

以下讨论摘要

静态成员不能由调用应用程序中的代码直接访问,只能通过 dll 中类的成员函数来访问。然而有几个inline访问静态成员的函数。这些函数将内联扩展到调用应用程序代码中,使调用应用程序直接访问静态成员。这将违反上面引用的结论,即静态变量是 dll 的本地变量,并且不能从调用应用程序中引用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

导出 DLL 中的静态数据 的相关文章

随机推荐

  • 如何在 Angular2 CLI 项目中设置 Stylus?

    我想在我的 Angular2 CLI 项目中使用 Stylus 而不是标准 CSS 我环顾四周 找不到任何关于如何设置它的可靠来源 当您使用 Angular cli 运行启动项目时 ng new my app style styl 角度 6
  • 使用 Forever 和 --prof 选项启动节点 V8 日志文件未创建

    我正在尝试使用 forver 模块运行我的节点应用程序 我还想传递 prof 选项来分析我的应用程序 我正在使用的命令是 NODE ENV staging PORT 3000 NODE CONFIG DIR domains serving
  • 在 WPF 资源字典中使用制表符和回车符

    如何在 WPF XAML 资源字典中使用制表符和回车符 这对我不起作用
  • 抽象实体上的核心数据关系

    当一个实体被设置为抽象时 在两个实体之间创建一对一的关系是否合法 抽象实体并不意味着要被实例化 这就是你的原因cannot 创建这样的关系 不过 您可以做的是创建一种关系 其中实体从抽象实体继承 From 苹果的文档 https devel
  • 用于临时变量赋值的 Python 上下文管理器

    我经常需要暂时用其他东西交换变量的值 进行一些依赖于该变量的计算 然后将变量恢复为其原始值 例如 var 0 Assign temporary value and do computation var ori var var 1 do so
  • 这个设计模式的名字是什么?

    假设我需要将应用程序中的文本保存到文件中 但允许用户拥有多种格式 pdf word txt 选择 第一种方法可能是 if extension pdf ExportToPdf file else if extension txt Export
  • 更改 UITableView、iPhone 中滚动条的宽度和颜色

    我只能找到是否要显示滚动条或不使用 tableView showsVerticalScrollIndicator YES NO 但如何自定义滚动条的颜色 宽度以及其他功能 如果可能 任何帮助将不胜感激 EDIT 我从代码片段中得到了这个想法
  • 如何在 AngularJs 中存储和读取会话(值)?

    我在存储和读取会话数据时遇到问题Angularjs 单击按钮后 emp name 应存储在session以及我如何读取存储的 emp namesession plnkr 中的示例 http plnkr co edit aX8A6b91obP
  • 如何在函数式编程中使用多态性? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 在不同域的远程计算机上启动 Windows 服务

    我的电脑位于域 A 中 远程服务器位于域 B 中 我想使用 c 或任何其他语言或脚本从我的电脑重新启动服务器上的服务 Notes 我通过 VPN 连接到服务器 这意味着我可以手动 RDP 服务器并可以手动重新启动服务 我无法使用本地服务窗口
  • WCF 错误 未提供客户端证书。在 ClientCredentials 中指定客户端证书

    我正在尝试调用 WCF 服务 我创建了一个自签名证书并安装在我的 localmachine personnal certificates 中 并且我还在我的部分中添加了该证书 但我不明白为什么会出现此错误 这是我的 web config
  • 如何替换子资源请求中的嵌入凭据?

    我在 Ionic 应用程序的控制台中收到此错误 Deprecation Subresource requests whose URLs contain embedded credentials e g https user pass hos
  • 应用程序邀请配置失败 Firebase iOS cocoapods

    我在尝试新版本的 firebase 时遇到了一个构建错误 Terminating app due to uncaught exception com firebase appinvite reason App Invite configur
  • 如何在 JavaScript 中实现函数数组?

    我对 JavaScript 还很陌生 我需要编写一对 20 x 20 矩阵函数 我的所有函数都接受一个数字并返回一个数字 即相同的签名 例如 Myfunctions 1 2 应该返回一对可以在代码中调用的函数 在 Java 中 我通常会实现
  • multiprocessing.Pool.imap_unordered 的内存使用量稳步增长

    我刚刚注意到我的程序在处理大文件时使用越来越多的内存 不过 它一次只处理一行 所以我不明白为什么它会继续使用更多内存 经过大量挖掘 我意识到该程序由三个部分组成 加载数据 一次一行 处理a中的每一行multiprocessing Pool
  • 将元素添加到 xml 文件

    我正在尝试从 C csproj 文件添加和删除元素 该文件的部分内容如下所示 有人可以告诉我如何做以下两件事吗 添加一个元素 如下所示 该行显示 我想添加 这 删除一个元素 例如 假设我想删除 I 行 已在下面指出
  • 应用程序操作:通过动态快捷方式在 Google Assistant 中显示小部件

    考虑到官方文档和代码实验室中显示的选项 我的问题相对简单 但我一直在努力使其工作 我想通过动态快捷方式触发一个小部件在 Google Assistant 中显示 看起来非常简单 但是当实现这样的功能和动态快捷方式时
  • Rails 3 ajax 更新部分在没有页面刷新的情况下不起作用

    我正在开发 Rails 3 购物车 我有一个目录页面 其中显示所有产品 还有一个部分显示购物车的要点 因此 用户添加到购物车的任何产品都会显示在此购物车部分中 现在 这不起作用了 将产品添加到购物车后 我必须点击刷新 否则部分不会更新 这是
  • 如何从不同的活动获取主启动活动的意图?

    我目前正在进行另一项活动 如何获取主启动 Activity 的 Intent Intent launchIntent getIntent 上式中 显然getIntent 不会让我得到正确的Intent我需要的 我怎样才能获得主启动Activ
  • 导出 DLL 中的静态数据

    我有一个 DLL 其中包含一个静态类members I use declspec dllexport 为了利用这个类methods 但是 当我将其链接到另一个项目并尝试编译它时 我收到静态数据的 无法解析的外部符号 错误 例如 在DLL中