静态库的静态成员

2024-02-07

我有带有静态成员的静态库。该库静态链接到主应用程序及其插件之一。看起来像在 main(应用程序)和 dll(插件)中初始化静态变量。

Question: 如何避免动态库加载时静态变量重新初始化。或者我可能错过了一些简单的事情?

更多信息:

这是一个简单的静态库,包含静态成员及其 getter 和 setter:

orbhelper.h

class ORBHelper {
    static std::string sss_;
public:
    static std::string getStr();
    static void setSTR(std::string str);
};

orbhelper.cpp

std::string ORBHelper::sss_ = "init";

static std::string ORBHelper::getStr()
{
    std::cerr << "get " << sss_.c_str() << std::endl;
    return sss_;
}
static void ORBHelper::setSTR(std::string str)
{
    sss_ = str;
    std::cerr << "set " << sss_.c_str() << std::endl;
}

该库在 main.cpp 中使用,也在另一个动态库中使用,该动态库在 main.cpp 中加载。 在 main.cpp 中,我设置了静态字符串,并在动态库函数之一中我想获取它。

在 main 中设置静态变量:

主程序

...
ORBHelper::setStr("main");
std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'main'
//then loading library
...

然后获取dll中的变量值:

硬件插件.cpp

...
std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'init' instead of 'main'
...

看起来静态变量已被初始化两次。第一个 - 在 main.cpp 之前,第二个 - 当动态库加载时。具有链接到主应用程序和动态库的静态类的静态库。

附:我的问题中有太多“静态”一词,我知道=)


是的,您有两个助手类实例。

DLL 应链接到链接静态类的可执行文件,并使用它来解析帮助程序类。不要将 DLL 与静态库链接,而是将其链接到可执行文件本身。

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

静态库的静态成员 的相关文章

随机推荐

  • Android-相对布局中ScrollView中的LinearLayout

    我的布局有点问题 我制作了RelativeLayout 其中放置了两个LinearLayout 1 和2 并在它们之间放置了带有LinearLayout 的ScrollView 接下来 我将 ScrollView 设置为放置在 Linear
  • Int64 创建数字范围

    我需要能够创建顺序长度超过 19 位的数字范围 我尝试使用 Enumerable Range 120000003463014 50000 ToList 这适用于较小的数字 但使用上面的代码时 我收到一条错误消息 指出它对于 int32 数字
  • SQL Server 2008根据机器设置获取DATETIMEOFFSET

    在 SQL Server 2008 R2 上 我有以下 T SQL 代码 SELECT CAST GETDATE AS DATETIMEOFFSET 这给了我如下结果 2011 12 26 10 21 13 7970000 00 00 但结
  • Apache Camel onException

    我想捕获路由中的所有异常 我添加这个 OnException onException Exception class process new MyFunctionFailureHandler stop 然后 我创建 MyFunction F
  • Heroku 与 NodeMailer 的问题

    我在 Heroku 上使用 Nodemailer 时遇到问题 非常感谢您的帮助 我的应用程序的先前版本曾经在 Heroku 上运行没有问题 当我回滚到该版本时 它仍然运行良好 在该应用程序的最新版本中 我没有对访问 Nodemailer 的
  • 在 iOS 中播放简单音效的最佳方法

    我发现许多有关在 iOS 中播放声音的相互矛盾的数据 每次用户触摸屏幕时仅播放简单的 ping 声音片段的推荐方法是什么 我用这个 头文件 import
  • 为什么“pip show”或“pip list”对我不起作用?

    蟒蛇的pip正在为我安装和更新软件包 但一些记录的命令似乎不受支持 至少在 OS 10 8 2 和 Python 2 7 2 上运行 1 2 1 时 当我尝试时 pip list or pip show
  • 升级时创建表

    我一直在努力解决这个问题 但我不知道我错过了什么 我有一个 Android 应用程序 我希望再添加 1 个表 但是我无法做到这一点 而且我也没有例外 不喜欢这些无声杀手 下面是我的 SQLiteHelper 类的代码 public clas
  • GWT 对单元格表进行排序,可能只是我没有看到的

    在过去的几个小时里 我一直在努力对 GWT CellTable 进行排序 这确实是一个愚蠢的问题 因为它已经在这里完成了http gwt google com samples Showcase Showcase html CwCellTab
  • Operator= 和 C++ 中未继承的函数?

    在我刚刚进行的测试之前 我认为在 C 中只有构造函数不被继承 但显然 任务operator 是不是太 这是什么原因呢 是否有任何解决方法来继承赋值运算符 是否也是如此operator operator 所有其他函数 除了构造函数 运算符 都
  • 暂停JW播放器?

    我有三个标签 每个选项卡的滑块中有两个视频 问题是当我切换任何选项卡时or单击任何单个视频 所有其他视频都应暂停 我可以收集所有 id 然后循环使用 stop 但是还有其他更干净 更简单的方法吗 jwplayer video pub sto
  • Universal Analytics - 第三方支付网关

    我们的网站目前正在通过跟踪代码管理器使用 Universal Analytics 进行跟踪 我们的结账流程包括在前往感谢页面之前重定向至第三方支付网关 所以 它看起来像这样 site com checkout gt site com pay
  • 通过保留顺序,根据 id 列将 Spark DataFrame 拆分为两个 DataFrame(70% 和 30%)

    我有一个 Spark 数据框 就像 id start time feature 1 01 01 2018 3 567 1 01 02 2018 4 454 1 01 03 2018 6 455 2 01 02 2018 343 4 2 01
  • 预先计算多维线性插值的权重

    我有一个沿 D 维度的非均匀矩形网格 网格上的逻辑值 V 矩阵和查询数据点 X 矩阵 网格点的数量在不同维度上有所不同 我对同一网格 G 和查询 X 多次运行插值 但对于不同的值 V 目标是预先计算插值的索引和权重并重用它们 因为它们始终相
  • Haystack more_like_this 返回全部

    我正在使用 Django haystack solr 进行搜索 我已经能够搜索 现在我想使用 more like this 查找类似的项目 当我尝试使用 more like this 功能时 我会返回属于该模型类型的所有对象 而不仅仅是与其
  • 以编程方式创建/运行命令文件

    我正在尝试创建一个 cmd 文件来安装 msi 然后通过 C 代码执行该 cmd 文件 如果我使用 Visual Studio 中的 f5 或 control f5 运行该代码 则该代码可以完美运行 但是 一旦我将代码打包在 msi 文件中
  • 如何在 ecmascript 6 中模拟导入的模块?

    我有一个带有 mocha babel 和 node 的测试设置 旨在测试 ecmascript 6 代码 有人对如何模拟被测模块中的导入有任何建议吗 ES2015 中的导入和导出是语言本身的一部分 并且被设计为可静态分析 因此 它们无法在运
  • 嵌套 CAST 不起作用

    为什么嵌套转换在 MySQL 中不起作用 它确实使用 SQL Server select cast cast myColumn as decimal 5 2 as int from myTable SQLFiddle示例 http sqlf
  • Codeigniter ajax CSRF问题

    我制作了一个简单的自动加载功能 当您在网站上向下滚动时加载内容 但是 当我在 Codeigniter 中启用 CSRF 保护时 似乎存在一些问题 我没有使用表单 所以当我在滚动时执行发布请求时 我不知道如何将令牌从 A 发送到 B 我的 J
  • 静态库的静态成员

    我有带有静态成员的静态库 该库静态链接到主应用程序及其插件之一 看起来像在 main 应用程序 和 dll 插件 中初始化静态变量 Question 如何避免动态库加载时静态变量重新初始化 或者我可能错过了一些简单的事情 更多信息 这是一个