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é =)

Respuestas a la pregunta(1)

Su respuesta a la pregunta