Wenn Sie es einfach so machen:
ar x a.a
ar x b.a
ar c c.a *.o
Sie verlieren einige Objektdateien, wenn sich in aa und ba Mitglieder mit demselben Namen befinden. Daher müssen Sie Mitglieder verschiedener Archive in verschiedene Ordner extrahieren:
ar x a.a && mv *.o a_objs
ar x b.a && mv *.o b_objs
ar c c.a a_objs/*.o b_objs/*.o
Darüber hinaus ist es möglich, dass sich in einem Archiv mehrere Mitglieder mit demselben Namen befinden (z. B. in aa). Wenn Sie ar x aa ausführen , erhalten Sie nur eines für Mitglieder mit demselben Namen.
Die einzige Möglichkeit, alle gleichnamigen Mitglieder in einem Archiv zu extrahieren, besteht darin, die Mitgliedsnummer mit der Option 'N' anzugeben:
ar xN 1 a.a xxx.c.o && mv xxx.c.o xxx.c.1.o
ar xN 2 b.a xxx.c.o && mv xxx.c.o xxx.c.2.o
...
Dies wäre eine mühsame Arbeit, daher müssen Sie ein ausgefeilteres Skript schreiben, um diesen Job zu erledigen.
Eine optionale Lösung besteht darin, dass Sie mehrere Archive in einer gemeinsam genutzten Bibliothek kombinieren können:
g++ -shared -o c.so -Wl,--whole-archive a.a b.a
Auf diese Weise erledigt der Linker alle Dinge für Sie!
libtool
-basierte Lösung :libtool -static -o new.a old1.a old2.a