Jeśli po prostu zrobisz to jako:
ar x a.a
ar x b.a
ar c c.a *.o
utracisz niektóre pliki obiektowe, jeśli istnieją członkowie o tej samej nazwie zarówno w aa, jak i ba, więc musisz rozpakować członków różnych archiwów do innego folderu:
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
Co więcej, możliwe jest, że w jednym archiwum jest wielu członków o tej samej nazwie (powiedzmy w aa), jeśli uruchomisz ar x aa , otrzymasz tylko jednego dla tych członków o tej samej nazwie.
Jedynym sposobem wyodrębnienia wszystkich członków o tej samej nazwie w jednym archiwum jest określenie numeru członka za pomocą opcji „N”:
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
...
byłaby to żmudna praca, więc będziesz musiał napisać bardziej wyrafinowany skrypt, aby wykonać tę pracę.
Jednym z opcjonalnych rozwiązań jest połączenie wielu archiwów w jedną wspólną bibliotekę:
g++ -shared -o c.so -Wl,--whole-archive a.a b.a
w ten sposób konsolidator zajmie się wszystkim za Ciebie!
libtool
libtool -static -o new.a old1.a old2.a