Ich habe Objekt A.o freigegeben, das statisch zu libssl.a verbindet & ein anderes gemeinsames Objekt B.so, das auch libssl.a statisch verknüpft.Statische Bibliothek zweimal geladen
A.so & B.so hat Symbole aus libssl.a im GLOBAL-Bereich. Ich überprüfte dies durch readelf -s A.so
Ich habe eine ausführbare Datei a.out, die A.so und B.so lädt. Wenn a.out beendet wurde, bekomme ich einen doppelten freien Fehler in einem der Symbole von libssl.a in A.so.
Obwohl libssl.a statisch mit jedem gemeinsam genutzten Objekt verknüpft ist, ist es möglich, dass das gleiche Symbol gemeinsam genutzt wird, anstatt es lokal zu kopieren.
Was ist die Problemumgehung das? Wie macht man die Symbole hier lokal?
Bitte helfen Sie
Ich würde empfehlen, einen Debugger zu verwenden, um Ihre Theorie zu bestätigen. – jdigital
Könnten Sie das ausarbeiten? – KodeWarrior
Nur eine kleine Sache, weil ich keine Ahnung habe, wie man es auf deine Situation anwendet: 'dlopen' hat ein RTLD_LOCAL-Flag, das unter Umständen in genau dieser Situation helfen würde. Also, wenn Sie diese Bibliotheken mit 'dlopen' öffnen, sollten sie sich dann wahrscheinlich nicht einmischen. – liori