Ich habe eine Linux-Shared Library, foo.so, die aus einer ausführbaren Datei mit dlopen("foo.so", RTLD_NOW | RTLD_LOCAL)
geladen wird. Von foo.so würde ich gerne eine andere Bibliothek öffnen, bar.so, die auf Symbole verweist, die in foo.so definiert sind, aber der Linker findet sie nicht. Ich kann RTLD_LOCAL nicht in RTLD_GLOBAL ändern, weil ich nicht die Quelle für die ausführbare Datei habe, die das Laden ausführt. Ich dachte, -Wl,--export-dynamic
wenn Verknüpfung foo.so könnte helfen, aber es überschreibt nicht das lokale Flag zu dlopen. Die neue Attributsichtbarkeitsfunktion von GCC sieht auch nicht so aus, als ob sie die Antwort bietet.dlopen mit zwei gemeinsamen Bibliotheken, Exportieren von Symbolen
Gibt es eine Weise, die ich den Linker anweisen können Verweise auf undefinierte Symbole in bar.so zu diesen Definitionen in foo.so zu lösen, ohne bar Verknüpfung mit -lfoo oder Ähnlichkeit der Symbole in eine dritte Bibliothek bewegt und verbindet beide foo und Bar dagegen? Das einzige, was mir in den Sinn kommt, ist, dloopen foo.so mit RTLD_GLOBAL von foo.so selbst, dann dlopen bar.so, aber das scheint mir ein bisschen durcheinander. Vielen Dank.
Danke für die Antwort. Ich kann foo.so nicht mit bar.so verknüpfen, weil bar.so ein von Benutzern bereitgestelltes Plug-in ist. Ich kann die ausführbare Datei auch nicht patchen, da diese normalerweise auf dem System des Kunden Root-Besitzer ist und ich bin mir nicht sicher, ob das Patchen zu gut für sie ist. Das kompliziert den Installationsvorgang erheblich. Es würde auch andere Bibliotheken brechen, die der Exec öffnet, einige von ihnen verlassen sich auf RTLD_LOCAL. Ich denke, ich muss mit dem dlopen foo.so von sich gehen hack, das scheint zu funktionieren. Prost –