在上一个问题中,我描述了一个问题,即一个类的静态成员变量对于包括它们在内的其他不同类实际上确实具有不同的值。
经过进一步研究,我发现包含具有静态成员变量的类的翻译单元被编译为静态库(.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:
g ++ -o plugin1.plb -shared -Wl,-Bsymbolic -Wl,-no-undefined -shared plugin1.os -lmyLibrary
插件2:
g ++ -o plugin2.plb-共享的-Wl,-Bsymbolic -Wl,-无定义-共享的plugin2.os -lmyLibrary
感谢您对这里发生的事情提出的任何建议,我已经尝试了2天。如果您觉得我忘了提供一些基本信息,请问一下,我会尽快将其添加到问题中!谢谢 :-)
问题:
如果可以预期,我该怎么做才能使变量在插件之间共享?
创建myLibrary
一个动态库(.so)而不是静态库(.a)。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句