Ci sono almeno tre modi per farlo in modo nativo . Il primo e più portabile modo è usare libtool. Dopo aver costruito anche le altre librerie con libtool, puoi combinarle semplicemente aggiungendo le .la libs a una variabile libaz_la_LIBADD di automake, o direttamente da un Makefile con qualcosa come:
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
Gli altri due sono almeno disponibili quando si usa GNU ar. È possibile utilizzare uno script MRI (denominato ad esempio libaz.mri), come:
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
e quindi eseguire ar come:
ar -M <libaz.mri
Oppure puoi usare un archivio sottile (opzione -T
), che consentirà di aggiungere altri archivi senza averli annidati all'interno, anche se lo svantaggio è che se vuoi distribuire la libreria statica, l'oggetto scollegato mancherà:
ar -rcT libaz.a libabc.a libxyz.a
Tutti i metodi precedenti gestiscono con grazia i nomi dei membri sovrapposti dagli archivi originali.
Altrimenti, dovresti decomprimere in directory diverse e reimballare nuovamente, per evitare di sostituire i nomi dei membri sovrapposti:
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz
libtool
libtool -static -o new.a old1.a old2.a