在前面的问题 ,我描述了一个类的静态成员变量实际上确实有不同的其他类,包括他们不同的价值观的问题。
在进一步的研究,我发现,含有与静态成员变量的类翻译单元被编译到静态库(.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天。 如果你觉得我忘了提供一些必要的信息,只是问,我会尽力把它尽快加入到这个问题越好! 谢谢 :-)