我有带有静态成员的静态库。该库静态链接到主应用程序及其插件之一。看起来像在 main(应用程序)和 dll(插件)中初始化静态变量。
Question: 如何避免动态库加载时静态变量重新初始化。或者我可能错过了一些简单的事情?
更多信息:
这是一个简单的静态库,包含静态成员及其 getter 和 setter:
orbhelper.h
class ORBHelper {
static std::string sss_;
public:
static std::string getStr();
static void setSTR(std::string str);
};
orbhelper.cpp
std::string ORBHelper::sss_ = "init";
static std::string ORBHelper::getStr()
{
std::cerr << "get " << sss_.c_str() << std::endl;
return sss_;
}
static void ORBHelper::setSTR(std::string str)
{
sss_ = str;
std::cerr << "set " << sss_.c_str() << std::endl;
}
该库在 main.cpp 中使用,也在另一个动态库中使用,该动态库在 main.cpp 中加载。
在 main.cpp 中,我设置了静态字符串,并在动态库函数之一中我想获取它。
在 main 中设置静态变量:
主程序
...
ORBHelper::setStr("main");
std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'main'
//then loading library
...
然后获取dll中的变量值:
硬件插件.cpp
...
std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'init' instead of 'main'
...
看起来静态变量已被初始化两次。第一个 - 在 main.cpp 之前,第二个 - 当动态库加载时。具有链接到主应用程序和动态库的静态类的静态库。
附:我的问题中有太多“静态”一词,我知道=)