Ich versuche, eine einzelne statische Bibliothek zu erstellen, die Objektdateien und vorhandene statische Bibliotheken enthält, die alle zuvor im Erstellungsprozess kompiliert wurden. Gibt es eine einfache Möglichkeit, dies mit "ar" zu tun, oder muss ich jede Bibliothek entpacken (ar x library_name) und ihre Objektdateien zu meiner vereinheitlichten Bibliothek hinzufügen?Verwenden von "AR" zum Kombinieren von .o und .a-Dateien (Linux)
Antwort
Sie müssen die Objektdateien aus den anderen Bibliotheken extrahieren und die extrahierten Objektdateien in Ihrer Verbundbibliothek bündeln.
Sehen Sie sich auch inkrementelle Laden: ld -r
Wenn Sie eine gemeinsam genutzte Bibliothek erstellen möchten Sie diese verwenden können:
Sie können das --whole-Archiv Flagge von ld:
--whole-archive
Fügen Sie für jedes Archiv, das in der Befehlszeile nach der Option --whole-archive angegeben wird, jede Objektdatei in das Archiv ein die Verknüpfung, anstatt das Archiv nach den erforderlichen Objektdateien zu durchsuchen. Dies wird normalerweise verwendet, um eine Archivdatei in eine gemeinsam genutzte Bibliothek umzuwandeln, wobei jedes Objekt gezwungen wird, in der resultierenden gemeinsam genutzten Bibliothek enthalten zu sein. Diese Option kann mehrmals verwendet werden.Zwei Hinweise bei Verwendung dieser Option von gcc: Erstens, GCC weiß nicht über diese Option, also müssen Sie -Wl, -whole-archive verwenden. Zweitens, vergessen Sie nicht, -Wl, -no-whole-archive nach Ihrer Liste von Archiven zu verwenden, da gcc eine eigene Liste von Archiven zu Ihrem Link hinzufügen wird und Sie nicht wollen, dass diese Markierung auch diese betrifft.
Bei statischen Bibliotheken müssen Sie möglicherweise zuerst die Objekte extrahieren.
fand ich folgende für ar
Gnu ar ein dünnes Archiv optional erstellen kann, die einen Symbolindex und Verweise auf die ursprünglichen Kopien der Teildateien des Archivs enthält. Ein solches Archiv ist nützlich zum Erstellen von Bibliotheken zur Verwendung innerhalb eines lokalen Builds, wobei erwartet wird, dass die verschiebbaren Objekte verfügbar bleiben, und das Kopieren des Inhalts jedes Objekts würde nur Zeit und Platz verschwenden. Dünne Archive werden ebenfalls abgeflacht, sodass das Hinzufügen eines oder mehrerer Archive zu einem Thin-Archiv die Elemente des verschachtelten Archivs einzeln hinzufügt. Die Pfade zu den Elementen des Archivs werden relativ zum Archiv selbst gespeichert.
Vielleicht können Sie ein solches dünnes Archiv verwenden.
Archivierung der Archive ist immer möglich. Ich habe nicht getestet, ob es funktioniert, wenn die tatsächliche API von der Implementierung aufgerufen wird.
Ex: ar rc lib1.a obj1.o ar rc lib2.a obj2.o ar rc lib3.a lib1.a lib2.a
you can check the contents of lib3.a by trying out.
ar x lib3.a which would extract lib1.a and lib2.a
Aber müssen Sie den Aufruf der API bauen von obj1.o und obj2.o. Dann müssen die Objektdateien nicht aus einzelnen Archiven extrahiert werden.
Hoffe es hilft!
- 1. Verwenden der bevorzugten Methode zum Kombinieren von Autofac und Dapper
- 2. Verwenden von Difflib zum Kombinieren von Excel-Tabellen
- 3. Verwenden von Unity über Java zum Erstellen von AR-Anwendungen mit Tango
- 4. Regex zum Kombinieren von Ziffern
- 5. Linux - Verwenden von ldconfig
- 6. Kombinieren von Data.Dynamic und Typklassen
- 7. Wie Verwenden von Bereich in AR-Anforderung mit Joins?
- 8. Was ist die Verwendung von Mcrt1.o und Scrt1.o?
- 9. Verwenden von Linux 'Dialog' Befehl von PHP
- 10. Python zum Kombinieren und wenn die Bedingungen
- 11. ffmpeg Befehl zum Kombinieren von Audio und Bildern
- 12. Kombinieren von C++ und C#
- 13. Frage zum Blockieren von I/O in einem Thread
- 14. Kombinieren von ListActivity und ActionBarActivity
- 15. Verwenden von Pandas zum Kombinieren von Zeilen in Excel-Tabellen unter Vermeidung von Duplikaten
- 16. Kombinieren von RandT und MaybeT
- 17. Memo von zu vermeidenden AR-Objekten selects
- 18. Verwenden von JProfiler unter Linux
- 19. Verwenden von Windows DLL von Linux
- 20. Algorithmus zum Kombinieren von zwei Binärbäumen?
- 21. Lambda-Erweiterung zum Kombinieren von Listen
- 22. Batch zum Kombinieren von Dateien ohne Header
- 23. Scalaz - Kombinieren von List und State Monad zum Verständnis
- 24. Empfohlener Ansatz zum Kombinieren von Roh-PHP und Codeigniter
- 25. Verwenden von Software Fließkomma auf x86-Linux
- 26. Emacs-Äquivalente von Vim's dd, o, O
- 27. Kombinieren von Prädikaten
- 28. Kombinieren von String- und Ausdruckinterpolation
- 29. Verwenden von socket.io zum Senden und Array
- 30. Linux Kombinieren Sie zwei Dateien, die von Spalte
Mögliches Duplikat http: // stackoverflow.com/questions/386579/pack-shared-libraries-in-the-elf –
Nein, kein Duplikat. Diese Frage bezieht sich auf den Versuch, eine Verbindung mit gemeinsam genutzten Bibliotheken herzustellen, während sich diese Frage auf statische Bibliotheken und Objekte bezieht, die noch nicht verknüpft sind. – ephemient
Wenn Sie den Buildprozess steuern, scheint dieses Muster eine saubere Lösung zu sein: http://stackoverflow.com/a/4318960/78342 – Chinasaur