Weiß jemand, warum eine in dlopen() initialisierte Bibliothek eine statische Variable initialisiert, die dem Hauptprogramm gehört. Sowohl das Hauptprogramm als auch die gemeinsam genutzte Bibliothek haben eine Kopie der statischen Variable, aber aus irgendeinem Grund initialisiert die gemeinsam genutzte Bibliothek die Kopie des Hauptprogramms der statischen Variablen und zerstört sie, was zu einem Segmentfehler führt, wenn das Hauptprogramm versucht, es zu zerstören.Hauptprogramm und gemeinsam genutzte Bibliothek initialisiert dieselbe statische Variable in __static_initialization_and_destruction_0
Ist dies ein Fall von schlechtem Namen Mangling in der Symboltabelle?
Hrm, ich habe ein Problem mit der Implementierung des Versions-Skripts und der Übergabe an den Linker. Es beschwert sich über einen Syntaxfehler. Hier ist die Skriptdatei, die ich verwendet habe: "{global: local: *;}" Irgendwelche Ideen? Ich habe nach Beispielen gesucht, aber alle scheinen die Syntaxprüfung nicht zu bestehen. Oder ist es besser, die Anweisung __asm__ direkt in die Quelle zu schreiben? – Paul
@Paul - meine Skripts sehen wie folgt aus: VERSION {{global: ...; lokal *; }; } 'und dann benutze ich einfach den Dateinamen dieser Datei in der Linker-Befehlszeile. –
@Samuel - Vielen Dank, nachdem das Versions-Skript fertiggestellt wurde und ein paar Symbole zum globalen Kontext hinzugefügt wurden, funktioniert es jetzt! – Paul