Hauptprogramm und Shared Library initialisiert gleiche statische Variable in __static_initialization_and_destruction_0

StackOverflow https://stackoverflow.com/questions/2631918

Frage

Wer weiß, warum eine Bibliothek innerhalb dlopen initialisiert () eine statische Variable durch das Hauptprogramm im Besitz initialisieren würde. Sowohl das Hauptprogramm und gemeinsam genutzte Bibliothek eine Kopie der statischen Variablen, aber aus irgendeinem Grund die gemeinsam genutzte Bibliothek erneut initialisiert die Kopie des Hauptprogramms der statischen Variablen und selbst zerstört sie, was zu einer segfault, wenn das Hauptprogramm versucht, es zu zerstören.

Ist das ein Fall von schlechten Namen in der Symboltabelle Mangeln?

War es hilfreich?

Lösung

Dies ist ein Fall, in dem die Laufzeit-Linker nur eine einzige aktive Kopie eines Symbols in einem Prozess will. Wenn sowohl ein gemeinsames Objekt und die ausführbare Datei eine Kopie des Symbols haben, werden die Laufzeit-Linker alle Verweise auf einem von denen lösen.

Was Sie tun können, um dieses Problem zu lösen, ist die Verwendung Symbol Reduktion mit dem Version Befehl des Link-Editor, wenn das gemeinsame Objekt zu bauen. Stellen Sie sicher, dass das Symbol für die statische Variable nicht global ist und Sie erhalten das Verhalten, das Sie suchen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top