recuerdo - Extraiga archivos de objetos(*.o) de una biblioteca estática de iPhone
organizar fotos iphone 6 (2)
Esto se debe a que su CustomiPhoneLib.a es una biblioteca grande, es decir, una biblioteca que contiene más de una arquitectura de destino, concretamente armv6 y armv7 en iOS. Puede usar lipo
para extraer una arquitectura específica en otro archivo .a, usar ar
y ranlib
para manipularlo a voluntad, y luego usar lipo
nuevo para volver a combinar los archivos .a manipulados en un solo archivo .a. Por ejemplo,
lipo CustomiPhoneLib.a -thin armv6 -output CustomiPhoneLibarmv6.a
lipo CustomiPhoneLib.a -thin armv7 -output CustomiPhoneLibarmv7.a
### use ar and ranlib at will on both files
mv CustomiPhoneLib.a CustomiPhoneLib.a.original
lipo CustomiPhoneLibarmv6.a CustomiPhoneLibarmv7.a -create -output CustomiPhoneLib.a
Sin embargo, no tiene que hacer esto por la razón que mencionó. El enlazador solo extraerá archivos de objeto (.o) de una biblioteca (.a) si necesita resolver alguna referencia de símbolo. Por lo tanto, si una biblioteca contiene un archivo de objeto cuyos símbolos nunca se mencionan durante el proceso de vinculación (es decir, símbolos que no se usan efectivamente), ese archivo de objeto no se convertirá en el ejecutable.
Tengo un conjunto de bibliotecas estáticas de iPhone (un archivo * .a) en el que solo llamo a algunas de las clases de. He usado AR en el pasado (con las bibliotecas de Linux) para extraer los archivos de objetos de la biblioteca estática, eliminar los archivos de objetos no deseados y rearchive.
Sin embargo, cuando intento esto con una biblioteca estática complementada con iPhone, aparece el siguiente error:
ar: CustomiPhoneLib.a is a fat file (use libtool(1) or lipo(1) and ar(1) on it)
ar: CustomiPhoneLib.a: Inappropriate file type or format
¿Alguien sabe cómo extraer los archivos de objetos de una biblioteca estática compilada de iphone? Hacerlo podría reducir el tamaño final del archivo.
Code:
ar -t mylib.a Esto mostrará una lista de todos los archivos en el archivo.
Code:
ar -xv mylib.a myobj.o Esto extraerá el objeto dado myobj.o de la biblioteca mylib.a.