objective-c - librerías - que es una libreria en programacion y para que sirve
Combina bibliotecas estáticas (4)
Debe usar ar -r
para crear un archivo en MacOS:
ar -x libabc.a
ar -x libxyz.a
ar -r libaz.a *.o
Probé el enfoque en esta question , pero parece que la versión de Linux de ar
no es la misma que la versión de mac ya que no pude combinar los archivos objeto nuevamente.
Lo que básicamente quiero hacer es fusionar otra biblioteca estática en mi producto de compilación de biblioteca estática de Xcode a través de una fase de compilación run-script.
Lamentablemente, no puedo compilar la otra biblioteca directamente en mi proyecto porque tiene su propio sistema de compilación (por lo tanto, utilizo las librerías compiladas).
Creo que debería ser posible fusionar la otra biblioteca mediante ar
en la biblioteca generada de Xcode sin descompilar el producto de compilación. ¿Cómo logro esto?
Debería poder vincular uno con el otro. Entonces ... solo usa ld
para fusionar las imágenes.
Si se trata de bibliotecas estáticas de múltiples arquitecturas, se requiere un poco de manipulación adicional para diluir cada biblioteca, combinar las versiones reducidas y luego engordar el resultado. Aquí hay un guión útil que puede editar a su gusto, que hace todo eso en uno. El ejemplo toma tres librerías iOS path/to/source/libs/libone.a
, path/to/source/libs/libtwo.a
, y path/to/source/libs/libthree.a
y las fusiona en una sola biblioteca 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
puedes usar libtool
para hacerlo
libtool -static -o new.a old1.a old2.a