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