Якщо ви просто зробите це як:
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