在静态库类的静态成员变量不共享?(Static class member variable in s

2019-10-22 09:39发布

在前面的问题 ,我描述了一个类的静态成员变量实际上确实有不同的其他类,包括他们不同的价值观的问题。

在进一步的研究,我发现,含有与静态成员变量的类翻译单元被编译到静态库(.A扩展)。 其他翻译单元(让我们称之为他们的插件,我在一个相当复杂的命名ADTF框架我的工作)是那些获得编译和链接以后包括这个库。

我的问题是现在:是否预料班plugin1和plugin2获得自己的myGlobalBool? 当我运行该程序,从plugin1修改cMyLibraryClass :: myGlobalBool不会改变plugin2变量。 如果预计,会有什么我需要做的让您在各种插件的共享变量? 请注意,我在Linux下,对SO其他一些问题( 在这里 , 在这里 ),似乎指出,对于Windows .DLL文件,这是预期,但在其他方面并没有对我有帮助。

我在做什么榜样(这是比这更复杂和错误可能是别的地方):

myLibrary.h

cMyLibraryClass
{
    cMyLibraryClass();
    static bool myGlobalBool;
    // Other static variables and stuff
}

myLibrary.cpp

include myLibrary.h

bool cMyLibraryClass::myGlobalBool;

cMyLibraryClass::cMyLibraryClass()
{
    // Constructor stuff
}

// Other function implementations of cMyLibraryClass

我结束了

libMyLibrary.a

该插件获取链接的任意不等阶以下选项:(我删除的路径和所有获得包括其他图书馆)

插件1:

克++ -o plugin1.plb -shared -Wl,-Bsymbolic -Wl, - 无未定义-shared plugin1.os -lmyLibrary

插件2:

克++ -o plugin2.plb -shared -Wl,-Bsymbolic -Wl, - 无未定义-shared plugin2.os -lmyLibrary

我很欣赏在这里发生了什么任何建议,我一直在努力,现在明白了2天。 如果你觉得我忘了提供一些必要的信息,只是问,我会尽力把它尽快加入到这个问题越好! 谢谢 :-)

Answer 1:

题:

如果预计,会有什么我需要做的让您在各种插件的共享变量?

myLibrary而不是静态库动态库(的.so)(.a)中。



Answer 2:

所以,接受的答案是解决我的问题。 万一有人曾经有ADTF(汽车数据和时间触发的框架),解决这其实很简单,当你知道去哪里找了同样的问题:

在扩展的主要SConsript文件,最后一行应该这样说:

扩展(extensionEnv,名称,来​​源=来源,静态=真,install_headers =标题)

您简单需要改变静态为false。 此后,进入构建/ [linux中,拿下] / [发布,调试] / $ yourextensionname,并在那里删除所有内容。 同时删除您的扩展文件夹任何剩余的.a文件,然后从头开始重建。 而已 :-)



文章来源: Static class member variable in static library not shared?