Kann ich eine gemeinsam genutzte Bibliothek erstellen, indem ich statische Bibliotheken verknüpfe?

7

Ich habe eine Reihe von statischen Bibliotheken (* .a), und ich möchte eine gemeinsame Bibliothek (* .a) erstellen, um diese statischen Bibliotheken (* .a) zu verlinken. Wie kann ich das in gcc / g ++ machen? Danke!

    
flyingbin 10.01.2012, 18:44
quelle

2 Antworten

13

Sie können (extrahieren Sie einfach alle .o Dateien und verknüpfen Sie sie mit -shared zu einem .so ), aber ob es funktioniert und wie gut es funktioniert, hängt von der Plattform ab und ob die statische Bibliothek war kompiliert als positionsunabhängiger Code (PIC). Auf einigen Plattformen (z. B. x86_64) ist nicht-PIC-Code in gemeinsam genutzten Bibliotheken nicht gültig und funktioniert nicht (tatsächlich denke ich, dass der Linker die .so ablehnen wird). Auf anderen Plattformen funktioniert nicht-PIC-Code in gemeinsam genutzten Bibliotheken, aber die speicherinterne Kopie der Bibliothek ist nicht zwischen verschiedenen Programmen, die sie verwenden, oder sogar verschiedenen Instanzen desselben Programms gemeinsam nutzbar, so dass es zu einem riesigen Speicherbedarf kommt / p>     

R.. 10.01.2012 21:49
quelle
6

Ich verstehe nicht, warum Sie die Dateien Ihrer dynamischen Bibliothek nicht einfach in .o-Dateien erstellen und mit

verknüpfen können %Vor%     
Joachim Isaksson 10.01.2012 18:48
quelle