Simulador de iPhone: "libpng.dylib, el archivo no tiene la arquitectura requerida"
Pregunta
Estoy intentando vincular la biblioteca libpng a mi aplicación de iPhone y obtengo este error:
ld: warning: in /opt/local/lib/libpng.dylib, file is not of required architecture
Esto sucede cuando compilo para el simulador o el dispositivo.
Sin embargo, cuando compilo una aplicación de consola, puedo enlazar en libpng muy bien.
¿Qué estoy haciendo mal? ¿Hay algún libpng.dylib diferente que deba usar para el desarrollo de iPhone?
Solución
Como dice Chris Long, libpng no está disponible en el iPhone. Puede compilarlo en su proyecto (si se compilará para ARM), de lo contrario no funcionará. Aquí hay una pista: http: // www.cloudgoessocial.net/2009/06/09/imagemagick-on-iphone-with-jpeg-png/
También, para el registro, puede escribir un UIImage como png de forma nativa usando: UIImagePNGRepresentation (UIImage * image)
Otros consejos
No puedes usar dylibs en iPhone, tendrás que compilarlo de forma estática. Dicho esto, el error que está viendo es un problema aparte.
¿Estás desarrollando en Snow Leopard? Si es así, entonces es probable que la biblioteca predeterminada que construyes sea de 64 bits. El simulador requiere bibliotecas de 32 bits. Puede verificar ejecutando el archivo contra él:
file /opt/local/lib/libpng.dylib
Si no ves algo como:
(for architecture i386): Mach-O dynamically linked shared library i386
Entonces no podrás reutilizarlo. Reconstruya la biblioteca como una biblioteca i386 estática y debería poder usarla en el simulador. Si es una compilación basada en autoconf esta publicación de blog explica cómo hacer una compilación y tiene un script de shell que puedes usar.
¿Es este un libpng.dylib que descargaste de Internet? Los desarrolladores de iPhone no pueden usar bibliotecas dinámicas externas.
No sé si libpng está disponible, pero aquí hay cómo verificarlo.
- Haga doble clic en el nombre de su aplicación en la lista de objetivos.
- Haz clic en el botón Más en la lista de Marcos e intenta encontrarlo. No olvide que los nombres en minúscula aparecen después de " Z " ;.
Si no está allí, no puedes usarlo. Intenta encontrar una biblioteca estática y compílala desde la fuente. Tiene que compilarse específicamente tanto para la arquitectura del iPhone Simulator (Intel) como para el iPhone (ARM).