【发布时间】:2015-03-26 19:54:00
【问题描述】:
在previous question 中,我描述了一个问题,即一个类的静态成员变量实际上对于不同的其他类(包括它们)具有不同的值。
经过进一步研究,我发现包含具有静态成员变量的类的翻译单元被编译为静态库(.a 扩展名)。稍后编译和链接的其他翻译单元(我们称它们为插件,我在一个名为 ADTF 的相当复杂的框架中工作)包括这个库。
我现在的问题是:是否期望 plugin1 和 plugin2 中的类拥有自己的 myGlobalBool?当我运行程序时,从 plugin1 修改 cMyLibraryClass::myGlobalBool 不会更改 plugin2 中的变量。如果是预期的,我需要做什么才能使变量在插件之间共享?请注意,我在 linux 下,关于 SO(here,here)的其他一些问题似乎指出,对于 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 -shared -Wl,-Bsymbolic -Wl,--no-undefined -shared plugin2.os -lmyLibrary
感谢您对这里发生的事情的任何建议,我已经尝试了解 2 天了。如果您觉得我忘记提供一些重要信息,请询问,我会尽快将其添加到问题中!谢谢:-)
【问题讨论】:
标签: c++ linux g++ static-libraries static-members