iphone - quedan - el archivo se creó para el archivo, que no es la arquitectura que se está vinculando(i386)
itunes (9)
Tengo que construir una biblioteca estática. Quiero usar en mi aplicación de iPhone y ipad. Cuando trato de ejecutar el simulador obtengo errores de enlace. Soy nuevo en el desarrollo de iOS. amablemente ayuda;
ld: advertencia: ignorando el archivo /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, el archivo se creó para el archivo que no es la arquitectura que se está vinculando (i386) Símbolos indefinidos para la arquitectura i386:
"_OBJC_CLASS _ $ _ netUtils", a la que se hace referencia de: objc-class-ref en ViewController.o ld: símbolos no encontrados para arquitectura i386 clang: error: el comando del enlazador falló con el código de salida 1 (use -v para ver la invocación)
Intenté agregar i386 en las Arquitecturas. pero sin suerte
A veces este tipo de errores te irrita!
Eliminar los datos derivados funciona para mí:
Pasos para arreglar
1) En XCODE> Windows> Proyecto> Seleccione su proyecto> Eliminar datos derivados> Salga de XCODE y vuélvalo a abrir> Si obtiene un error de MAC-O-Linker en el builing> Remítase a this enlace> Limpiar y compilar de nuevo.
Después de luchar con este mismo problema y seguir todas las respuestas aceptadas de actualizar la configuración de compilación, borrar la ruta de búsqueda del enlazador, etc. Finalmente descubrí una respuesta que me funcionó.
Antes de construir, asegúrese de seleccionar el tipo correcto (simulador de iPhone) en lugar del dispositivo iOS. Entonces reconstruye. De lo contrario, está intentando usar una biblioteca creada para un dispositivo iOS (procesador de brazo) en un simulador en su mac (i386). Debería haber sido obvio, pero no fue así.
Antes de:
Después:
Ahora, busque en el grupo Productos en el Navegador> haga clic con el botón derecho en su biblioteca estática (archivo .a)> Mostrar en Finder, verá que está en una carpeta Debug-iphonesimulator en lugar de Debug-iphoneos. No presté ninguna atención al nombre de la carpeta originalmente, o podría haber pensado en esto antes.
Espero que esto ayude.
En realidad, no sé si mi consejo es correcto, pero intenta verificar esto:
- Seleccione su proyecto
- Seleccione "Configuraciones de compilación"
- Verificar Arquitecturas:
- Las arquitecturas válidas deben ser "armv6 armv7"
- Las plataformas compatibles deberían ser "iPhonesimulator iphoneos" (tal vez iPad, no sé)
- Base SDK: su iOS SDK (tengo iOS 5.0).
No me juzgues si soy capitán obvio :)
Este problema no ocurrirá cuando ejecutemos la aplicación en el dispositivo. Puede verificarlo ejecutando el código en el dispositivo iOS.
Si obtengo la advertencia de ignorar archivo, ejecutaría lipo -info
en un archivo ignorado para encontrar su arquitectura como la siguiente
lipo -info libnetUtils.a
Eso imprimiría cualquiera de i386, armv6, armv7, armv7s, x86_64 etc. En general, esa arquitectura tiene que coincidir con su plataforma de compilación de destino. P.ej
- i386 = ios simulator o 32 bit build en mac os x
- armv6 armv7 arm7s = ios dispositivo
- x86_64 = 64 bit construidos en mac os x
Dependiendo de la falta de coincidencia, o bien tiene que reconstruir su biblioteca para su plataforma de destino o cambiar su plataforma de destino.
Nota: Para los binarios gordos, lipo -info
imprimirá una combinación de las arquitecturas anteriores.
Significa que la biblioteca que intentas usar no fue compilada universalmente para el simulador iOS (los símbolos i386 son para Mac). Sin embargo, ejecutarlo en un dispositivo real debería funcionar bien.
Su libnetUtils.a
se está construyendo para una arquitectura diferente a su objetivo.
Compruebe la configuración de compilación libnetUtils. Las arquitecturas para las que se está construyendo y su lista de arquitecturas compatibles deben ser un superconjunto (débil) de la arquitectura de su destino. La complejidad aquí es que la arquitectura resultante se distribuye en varias configuraciones: "Arquitecturas", "Construir arquitectura activa solamente" y "Arquitecturas válidas".
La configuración "Crear solo arquitectura activa" lo hace particularmente confuso. Por ejemplo, supongamos que está construyendo para el simulador. Si la configuración "Construir solo arquitectura activa" para Depurar está configurada en NO, construirá todas las arquitecturas enumeradas en "Arquitecturas" y "Arquitecturas válidas" (probablemente armv7, etc.). Pero si libnetUtils tiene esa configuración establecida en Sí (Debug: Yes), solo está generando para i386. Entonces, cuando su enlazador intenta vincular armv7 con i386, falla.
También tenía una arquitectura de armv7s. Lo borré y me aseguré de que armv6 y armv7 fueran los únicos dos en la lista. Ahora funciona
Tuvo el mismo problema e intenté diversas soluciones de la página sin resultado. Aún tenía un mensaje que decía que mi biblioteca no estaba compilada para arm64.
Finalmente cómo lo resolví:
- abrió el proyecto.pbxproj para la biblioteca en un editor de texto
- buscado VALID_ARCHS
- hubo 4 ocurrencias, 2 de las cuales no contenían arm64
- Añadí manualmente arm64 en la cadena (VALID_ARCHS = "arm64 i386 armv7 armv7s")
- reconstruir la lib y estaba bien
Parece que a veces la configuración de compilación que muestra XCode es incompleta y no se corresponde exactamente con el archivo del proyecto.