Existem pelo menos três maneiras de fazer isso nativamente . A primeira e mais portável maneira é usar libtool. Depois de ter construído as outras bibliotecas também com libtool, você pode combiná-las apenas adicionando as libs .la a uma variável libaz_la_LIBADD automake, ou diretamente de um Makefile com algo como:
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
Os outros dois estão pelo menos disponíveis ao usar o GNU ar. Você pode usar um script de MRI (denominado, por exemplo, libaz.mri), como:
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
e, em seguida, execute ar como:
ar -M <libaz.mri
Ou você pode usar um arquivo fino (opção -T
), que permitirá adicionar outros arquivos sem colocá-los aninhados dentro, embora a desvantagem seja que se você quiser distribuir a biblioteca estática, o objeto separado ficará ausente:
ar -rcT libaz.a libabc.a libxyz.a
Todos os métodos acima lidam perfeitamente com nomes de membros sobrepostos dos arquivos originais.
Caso contrário, você teria que desempacotar em diretórios diferentes e empacotar novamente, para evitar a substituição de nomes de membros sobrepostos:
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz
libtool
solução baseada em :libtool -static -o new.a old1.a old2.a