Statische Mitglieder statischer Bibliotheken

Ich habe statische Bibliothek mit statischem Mitglied. Diese Bibliothek ist statisch mit der Hauptanwendung und einem ihrer Plugins verknüpft. Sieht aus wie eine statische Variable, die sowohl in main (Anwendung) als auch in dll (Plugin) initialisiert wird.

Frage: So vermeiden Sie eine Neuinitialisierung statischer Variablen beim Laden dynamischer Bibliotheken. Oder kann ich etwas Einfaches vermissen?

Mehr Informationen:

Dies ist eine einfache statische Bibliothek, die statische Member sowie Getter und Setter enthält:

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>

Diese Bibliothek wird in main.cpp und auch in einer anderen dynamischen Bibliothek verwendet, die in main geladen wird. In main.cpp setze ich den statischen String und in einer der dynamischen Bibliotheksfunktionen möchte ich ihn bekommen.

Festlegen der statischen Variablen in main:

main.cpp

<code>...
ORBHelper::setStr("main");
std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'main'
//then loading library
...
</code>

Dann wird der variable Wert in der DLL abgerufen:

hwplugin.cpp

<code>...
std::cerr << ORBHelper::getStr().c_str() << std::endl; //prints 'init' instead of 'main'
...
</code>

Es sieht so aus, als ob die statische Variable zweimal initialisiert wurde. Erstens - vor main.cpp, zweitens - beim Laden der dynamischen Bibliothek. Statische Bibliothek mit statischer Klasse, die sowohl mit der Hauptanwendung als auch mit der dynamischen Bibliothek verknüpft ist.

P.S. zu viele Wörter 'statisch' in meiner Frage, ich weiß =)

Antworten auf die Frage(1)

Ihre Antwort auf die Frage