Combina librerie statiche

Ho provato l’approccio in questa domanda , ma sembra che la versione linux di ar non sia la stessa della versione mac poiché non sono riuscito a combinare nuovamente i file object.

Quello che fondamentalmente voglio fare è unire un’altra libreria statica nel mio prodotto di generazione di librerie statiche Xcode tramite una fase di costruzione di script di esecuzione.

Sfortunatamente non riesco a compilare l’altra libreria direttamente nel mio progetto perché ha il proprio sistema di compilazione (quindi uso le librerie compilate).

Penso che dovrebbe essere ansible unire l’altra libreria tramite ar nella libreria generata da Xcode senza decompilare il prodotto build. Come posso realizzare questo?

puoi usare libtool per farlo

 libtool -static -o new.a old1.a old2.a 

Se hai a che fare con librerie statiche multi-architettura, è necessario un po ‘di manipolazione extra per diluire ogni libreria, combinare le versioni diluite e quindi ingrassare il risultato. Ecco un comodo script che puoi modificare in base alle tue esigenze, il che fa tutto ciò in uno. L’esempio prende tre path/to/source/libs/libone.a librerie iOS path/to/source/libs/libone.a , path/to/source/libs/libtwo.a , e path/to/source/libs/libthree.a e li unisce in una singola libreria libcombined.a .

 #! /bin/bash INPATH="path/to/source/libs" LIBPREFIX="lib" LIBS="one two three" LIBEXT=".a" OUT="combined" ARCHS="armv7 armv7s arm64" for arch in $ARCHS do for lib in $LIBS do lipo -extract $arch $INPATH/$LIBPREFIX$lib$LIBEXT -o $LIBPREFIX$lib-$arch$LIBEXT done INLIBS=`eval echo $LIBPREFIX\{${LIBS// /,}\}-$arch$LIBEXT` libtool -static -o $LIBPREFIX$OUT-$arch$LIBEXT $INLIBS rm $INLIBS done OUTLIBS=`eval echo $LIBPREFIX$OUT-\{${ARCHS// /,}\}$LIBEXT` lipo -create $OUTLIBS -o $LIBPREFIX$OUT$LIBEXT rm $OUTLIBS 

Dovresti solo essere in grado di colbind l’uno all’altro. Quindi … usa solo ld per unire le immagini.

Dovresti usare ar -r per creare un archivio su MacOS:

 ar -x libabc.a ar -x libxyz.a ar -r libaz.a *.o