Frage

Ich habe eine Drittanbieter-Bibliothek, die hauptsächlich aus einer großen Anzahl von statischen (.a) Bibliotheksdateien besteht. Ich kann dies in einer einzigen .a Bibliotheksdatei kompilieren, aber ich brauche es wirklich eine einzige .so Shared Library-Datei zu sein.

Gibt es eine Möglichkeit, eine statische .a Datei in eine gemeinsame .so-Datei zu konvertieren? Oder allgemeiner ist es eine gute Möglichkeit, eine große Anzahl von statischen .a Dateien mit wenigen .o Objektdateien in eine einzige .so Datei zu kombinieren?

War es hilfreich?

Lösung

Ist dies (mit entsprechender -L ist natürlich)

gcc -shared -o megalib.so foo.o bar.o -la_static_lib -lb_static_lib

es nicht tun?

Andere Tipps

Sie können dies nicht tun, wenn Objekte in statische Bibliothek ohne -fPIC kompiliert wurde oder wie.

g++ -shared -o megalib.so foo.o bar.o -Wl,--whole-archive -la_static_lib -lb_static_lib -Wl,--no-whole-archive -lc_static_lib -lother_shared_object

Ich bin über gcc nicht sicher, aber für g ++ Ich hatte die --whole-Archiv Linker-Option hinzufügen, um die Objekte aus den statischen Bibliotheken im gemeinsamen Objekt aufzunehmen. Die --no-ganze-Archiv Option ist erforderlich, wenn Sie libc_static_lib.a und libother_shared_object.so verknüpfen möchten, aber nicht, sie als Ganzes in megalib.so umfassen.

ar -x lib***.a
gcc -shared *.o -o lib***.so

ar -x kann auch nützlich sein, wenn Sie auf bestimmte Objekte von Ihrem .as konzentrieren wollen, und Sie wollen nicht alles auf Ihrem eigenen hinzuzufügen.

Beispiele:

ar -x lib***.a
gcc -shared *.o -o lib***.so
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top