Ci sono almeno tre modi per fare questo in modo nativo. Il primo e più portabile è usare libtool. Dopo aver costruito le altre librerie anche con libtool, è possibile combinarli semplicemente aggiungendo le librerie .la ad una variabile libaz_la_LIBADD automake, o direttamente da un Makefile con qualcosa di simile:
libtool --mode=link cc -static -o libaz.la libabc.la libxyz.la
Gli altri due sono almeno disponibili quando si utilizza GNU ar. È possibile utilizzare uno script MRI (denominato ad esempio libaz.mri), come ad esempio:
create libaz.a
addlib libabc.a
addlib libxyz.a
save
end
e quindi eseguire ar come:
ar -M <libaz.mri
Oppure si può utilizzare un sottile archivio (opzione -T
), che consentirà di aggiungere altri archivi senza ottenere loro annidati all'interno, anche se il lato negativo è che se si desidera distribuire la libreria statica, mancherà l'oggetto distaccato:
ar -rcT libaz.a libabc.a libxyz.a
Tutti i metodi sopra descritti gestiscono con garbo i nomi dei membri sovrapposti dagli archivi originali.
In caso contrario, sarebbe necessario scompattare in diverse directory e imballare ancora una volta, per evitare di sostituire i nomi dei membri che si sovrappongono:
mkdir abc; cd abc; ar -x ../libabc.a
mkdir xyz; cd xyz; ar -x ../libxyz.a
ar -qc libaz.a abc xyz
fonte
2014-05-13 02:09:04
Consulta anche: [ 'soluzione libtool' basata] (http: // StackOverflow. it/a/8170851/196561): 'libtool -static -o new.a old1.a old2.a' – osgx
funziona perfettamente, solo un piccolo dubbio se quelle librerie hanno file.o comune (ma le funzionalità sono saggie sono diverse) funzionerà ancora? – bindingofisaac