Существует как минимум три способа сделать это изначально . Первый и самый переносимый способ - использовать libtool. Собрав другие библиотеки также с помощью libtool, вы можете объединить их, просто добавив библиотеки .la в переменную automake libaz_la_LIBADD или непосредственно из файла Makefile, например:
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
Два других по крайней мере доступны при использовании GNU ar. Вы можете использовать скрипт MRI (названный, например, libaz.mri), например:
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
и затем выполните ar как:
ar -M <libaz.mri
Или вы можете использовать архив thin (опция -T
), который позволит добавлять другие архивы, не вкладывая их внутрь, хотя недостатком является то, что если вы хотите распространять статическую библиотеку, отсоединенный объект будет отсутствовать:
ar -rcT libaz.a libabc.a libxyz.a
Все вышеперечисленные методы изящно обрабатывают перекрывающиеся имена членов из исходных архивов.
В противном случае вам придется распаковать в разные каталоги и перепаковать заново, чтобы избежать замены перекрывающихся имен элементов:
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz