Angenommen, ich habe a.so und b.so. Kann ich c.so als eine einzige gemeinsam genutzte Bibliothek mit allen von a und b exportierten Funktionen erstellen, wobei natürlich alle Intra-Abhängigkeiten aufgelöst werden (dh alle Funktionen von b.so, die von a.so aufgerufen werden und umgekehrt)?
Ich habe es versucht
gcc -shared -Wl,soname,c.so -o c.so a.so b.so
aber es funktioniert nicht.
Das Gleiche gilt, wenn ich ao und bo in aa und ba archiviere (was ao und bo nicht ändern sollte) und dies tue
gcc -shared -Wl,soname,c.so -o c.so a.a b.a
Vielen Dank
Das Zusammenführen mehrerer gemeinsam genutzter Bibliotheken zu einer einzigen ist in der Tat auf allen UNIXen praktisch unmöglich, mit Ausnahme von AIX: Der Linker betrachtet die .so-Datei als “endgültiges” Produkt.
Aber das Zusammenführen von Archiven in .so sollte kein Problem sein:
gcc -shared -o c.so -Wl,--whole-archive a.a b.a -Wl,--no-whole-archive
In der Praxis ist es nicht möglich.
Aus Linker-Sicht ist eine SO-Bibliothek ein Endprodukt, das keine für das Linken erforderliche Verschiebungsinformation enthält.
Wenn Sie Zugriff auf Quell- oder Objektdateien für beide Bibliotheken haben, ist es einfach, daraus ein kombiniertes SO zu kompilieren/linken.
14083000cookie-checkFühren Sie mehrere gemeinsam genutzte .so-Bibliotheken zusammenyes
Am Ende habe ich auf ein Bibliotheksskript mit einer GRUPPE zurückgegriffen, mit dem ich alle kleinen Bibliotheken als eine einzige anzeigen kann, aber eine Software könnte nur mit der richtigen “Unter” -Bibliothek verknüpfen.
– Metiu
28. Mai 2009 um 20:07 Uhr