Если вы просто сделаете это как:
ar x a.a
ar x b.a
ar c c.a *.o
вы потеряете некоторые объектные файлы, если в aa и ba есть элементы с одинаковыми именами, поэтому вам необходимо извлечь элементы из разных архивов в другую папку:
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
более того, возможно, что в одном архиве есть несколько элементов с одинаковым именем (скажем, в aa), если вы запустите ar x aa , вы получите только один для этих элементов с тем же именем.
Единственный способ извлечь все элементы с одинаковыми именами в один архив - указать номер элемента с помощью опции '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
...
это будет утомительная работа, поэтому вам придется написать более сложный сценарий для выполнения этой работы.
Одно из дополнительных решений - вы можете объединить несколько архивов в одну общую библиотеку:
g++ -shared -o c.so -Wl,--whole-archive a.a b.a
таким образом компоновщик сделает все за вас!
libtool
libtool -static -o new.a old1.a old2.a