c++ - 静态库中的静态类成员变量不共享?

标签 c++ linux g++ static-libraries static-members

previous question 中,我描述了一个问题,即一个类的静态成员变量实际上对包括它们在内的不同其他类具有不同的值。

经过进一步研究,我发现包含带有静态成员变量的类的翻译单元被编译为静态库(.a 扩展名)。稍后编译和链接的其他翻译单元(我们称它们为插件,我正在一个名为 ADTF 的相当复杂的框架中工作)包括这个库。

我现在的问题是:是否期望 plugin1 和 plugin2 中的类获得它们自己的 myGlobalBool?当我运行程序时,从 plugin1 修改 cMyLibraryClass::myGlobalBool 不会更改 plugin2 中的变量。如果是预期的,我需要做什么才能使变量在插件之间共享?请注意,我在 linux 下,关于 SO(herehere)的其他一些问题似乎指出,对于 Windows .dll,这是预期的,但除此之外对我没有帮助。

我正在做的事情的例子(它比那个更复杂,错误可能在其他地方):

我的图书馆.h

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

我的图书馆.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 天。如果您觉得我忘记提供一些基本信息,请询问,我会尽快将其添加到问题中!谢谢:-)

最佳答案

问题:

If it is expected, what would I need to do make the variable shared across plugins?

使 myLibrary 成为动态库 (.so) 而不是静态库 (.a)。

关于c++ - 静态库中的静态类成员变量不共享?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29287610/

相关文章:

c++ - 无效使用非静态数据成员 C++ Student

linux - 找到 : missing argument to -exec with ssh

c++ - "make"使用模式匹配时失败

c++ - 每次获取不同的地址

c++ - 我可以安全地假设 if(true) 和 if(false) 将被优化吗?

c++ - 如何使用 V8 的内置函数

c# - 空对象与空对象

c++ - 如何从 C++ 中以 '|' 字符分隔的字段中提取数据?

linux - 无法使用 ANT 创建 tar

c++ - LD_LIBRARY_PATH 不包含导出路径