Miembros estáticos de bibliotecas estáticas
Tengo biblioteca estática con miembro estático. Esta biblioteca está enlazada estáticamente a la aplicación principal y a uno de sus complementos. Parece que la variable estática se inicializa tanto en main (aplicación) como en dll (plugin).
Pregunta: Cómo evitar la reinicialización de variables estáticas al cargar bibliotecas dinámicas. ¿O me puede estar perdiendo algo simple?
Más información:
Esta es una biblioteca estática simple, que contiene miembros estáticos y es getter y setter:
orbhelper.h
<code>class ORBHelper { static std::string sss_; public: static std::string getStr(); static void setSTR(std::string str); }; </code>
orbhelper.cpp
<code>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; } </code>
Esta biblioteca se utiliza en main.cpp y también en otra biblioteca dinámica, que se carga en main. En main.cpp establezco la cadena estática y en una de las funciones de biblioteca dinámica quiero obtenerla.
Configurando la variable estática en main:
main.cpp
<code>... ORBHelper::setStr("main"); std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'main' //then loading library ... </code>
Entonces obteniendo valor variable en dll:
hwplugin.cpp
<code>... std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'init' instead of 'main' ... </code>
Parece que la variable estática se ha inicializado dos veces. Primero, antes de main.cpp, segundo, cuando se carga la biblioteca dinámica. Liberación estática con clase estática vinculada tanto a la aplicación principal como a la dinámica.
PD demasiadas palabras 'estáticas' en mi pregunta, lo sé =)