Error de compilación: falta la arquitectura i386 requerida en el archivo

105

Recibo este error al compilar mi aplicación para iPhone:

ld: advertencia: en /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, falta la arquitectura necesaria i386 en el archivo

Es igual para todos los marcos de mi aplicación. Es muy extraño ya que esto no sucedía antes.

Gabe Shahbazian
fuente
¿Ocurrió esto después de instalar Snow Leopard y el nuevo iPhone SDK (Xcode 3.2)?
avocade
8
Mi respuesta soluciona el problema. Por favor, compruebe.
Jordania
9
Otra posibilidad que no se analiza en las respuestas es que obtendrá este error si ha agregado una referencia a un marco no universal (es decir, agregó un marco armv6 / armv7 y luego intentó hacer una compilación del simulador). Esto es principalmente una preocupación si ha estado creando sus propios marcos personalizados.
2011
@aroth también es correcto, verifique esta pregunta
ArkReversed

Respuestas:

131

Esto sucede cuando agrega un marco a su proyecto y sin quererlo copia el marco en el directorio de su proyecto.

La solución es verificar el directorio de su proyecto (donde almacena su proyecto en el disco) para ver si hay archivos iPhone SDK * .Framework y eliminarlos.

El proyecto se construirá bien después.

Jordán
fuente
4
Además, pruébelo en un dispositivo iOS en lugar de en un simulador.
Raptor
Si tiene otro marco, la modificación del archivo del proyecto parece eliminar las referencias a eso también, aunque esto funcionó y fue más fácil, gracias Jordan
texian
No me funciona. No hay archivos .framework en el directorio de mi proyecto. Fwiw, hice una limpieza y luego una compilación y comenzó este problema. El limpio de alguna manera debe haber roto cosas.
Alyoshak
85

Tuve el mismo problema y la solución resultó ser fácil. Haga una copia de seguridad y luego abra project.pbxproj (ubicado dentro del paquete de archivos de su proyecto) en TextMate o TextEdit y busque la sección titulada "/ * Begin XCBuildConfiguration section * /". Busque una clave llamada FRAMEWORK_SEARCH_PATHS y elimínela y su contenido (una vez por configuración de compilación, así que la eliminé en dos lugares). Aquí hay un ejemplo de lo que eliminé:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Mi proyecto ahora se compila tanto para el dispositivo iPhone como para iPhoneSimulator.

Sean Roehnelt
fuente
2
Puedo verificar que esto funciona como se describe. Parece que Xcode puede perder fácilmente contacto con sus metadatos al mover proyectos de Xcode entre diferentes computadoras; en este caso uno tiene 3.0 y Leopard, y el otro 3.1 y Snow Leopard instalado. Los metadatos de FRAMEWORK_SEARCH_PATHS se muestran en blanco en la Configuración de compilación, mientras que el project.pbxproj real tiene contenido.
avocade
1
FRAMEWORK_SEARCH_PATHS de acuerdo también se mostró en blanco en la configuración de compilación para mí también. Sin embargo, la edición manual del archivo project.pbxproj como se describe solucionó el problema.
Alasdair Allan
11
Esto no funcionó para mí. SIN EMBARGO, me llevas al lugar correcto para buscar. Mi .pbxproj no tenía la clave FRAMEWORK_SEARCH_PATHS, sino una clave llamada LIBRARY_SEARCH_PATHS.
rebelión
Yo segundo @rebellion. Quizás las versiones más recientes de XCode hayan cambiado el nombre de la clave.
Moshe
Gracias, también tenía una clave LIBRARY_SEARCH_PATHS perdida en mi archivo pbxproj. La clave apareció en negrita en la Configuración del proyecto en Xcode 3, pero sin valor. Esto me llevó a creer que algo andaba mal. Abrí el proyecto en Xcode 4 Preview 5 una vez, después de lo cual sucedió esto.
mvexel
43

Lo que ha sucedido aquí es que Xcode ha agregado misteriosamente una entrada "Rutas de búsqueda de marco" que apunta a un SDK de dispositivo iPhone en particular. Por ejemplo, el mío se configuró recientemente en:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Esto lleva al compilador a encontrar marcos de arquitectura incorrecta. La eliminación de cualquier valor en la clave "Rutas de búsqueda de marco" en la configuración de compilación de su objetivo resolverá el problema.

John Cromartie
fuente
este fue el problema en mi caso. había agregado un montón de directorios de búsqueda cada vez que agrego una nueva biblioteca. incluso si elimino la referencia, la entrada del directorio de búsqueda solía estar allí y había causado el problema.
darshansonde
"Framework Search Paths" ya están vacías en mi caso. El error exacto que obtengo es ld: compilando para iOS Simulator, pero vinculando contra dylib construido para el archivo MacOSX '/usr/lib/libSystem.B.dylib' para la arquitectura i386 clang: error: el comando del enlazador falló con el código de salida 1 ( use -v para ver la invocación) Estoy usando SDK 7.0 en Mavericks.
Respuesta
Tuve el mismo error, eliminé los valores de la ruta de búsqueda del marco en Configuración de compilación y ahora se compila con éxito.
Nirav
10

Solo quería mencionar que en XCode si vas a "Editar configuración del proyecto" y buscas "Rutas de búsqueda", hay un campo para "Rutas de búsqueda de marco". Actualizar esto debería solucionar el problema, ¡sin tener que piratear el archivo del proyecto!

¡Salud!

Jesse


fuente
Tengo el mismo problema que me está volviendo absolutamente loco. Parece que ustedes conocen la solución, pero no puedo localizar el archivo "project.pbxproj" y no puedo encontrar dónde se encuentra "Editar configuración del proyecto".
saman01
2
En XCode 4.2.1 encontré esto de la siguiente manera: haga clic en el nombre del proyecto en el Navegador de proyectos. En la pantalla de propiedades que aparece, seleccione la pestaña 'Configuración de compilación'. Las rutas de búsqueda se encuentran en esta pantalla. Eliminarlos funcionó para mí.
dsteele
8

Compruebe que no haya copiado el marco en su proyecto cuando lo agregó. Si lo copió, no puede encontrar las rutas originales. Para solucionar este problema. Elimine el marco AVFoundation de su carpeta de marcos en su proyecto, luego agréguelo nuevamente, pero esta vez, asegúrese de no tener marcada la verificación de copia.

¡Esto me lo arregló!

Jrman52
fuente
8

Lo arreglé de una manera diferente.La razón por la que recibí este error fue que agregué security.framework dos veces en mi proyecto.No pude ver el marco de seguridad en xcode, abrí el proyecto en el buscador y encontré este marco que Eliminé y problema resuelto.

Suraj K Thomas
fuente
7

Si su aplicación está diseñada para ejecutarse en el dispositivo, asegúrese de que no está intentando ejecutarla en el simulador. Puede parecer obvio, pero compruébalo de todos modos.

Eric Brotto
fuente
5

Aunque es posible que algo se haya eliminado, según mi experiencia, algo se estropea en el archivo del proyecto. Todavía tengo que precisar qué es ese "algo". He tenido problemas similares cuando la instalación del SDK está bien. Hay un par de opciones.

Primero, agregue todos sus archivos a un nuevo proyecto. Esto parece funcionar normalmente. Sin embargo, es una especie de dolor.

En segundo lugar, puede hacer clic con el botón derecho en el proyecto en XCode / Get Info / Build / Library Search Paths. Agregue nuevas rutas similares a /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Agregue versiones apropiadas de esa cadena para cada versión (2.2.1, etc.) y plataforma (simulador o iPhoneOS). Realice una acción similar para las rutas de búsqueda de marcos si los marcos son su problema.

En tercer lugar, que es más trabajo pero más confiable, es abrir project.pbxproj desde MyProject.xcodeproj (Textmate es bueno para esto). Busque "/ * Begin XCBuildConfiguration section * /", luego "LIBRARY_SEARCH_PATHS" y "FRAMEWORK_SEARCH_PATHS". Agregue o modifique las rutas según corresponda y guarde el archivo.

En cualquier caso, un dolor en el trasero, y me gustaría señalar la causa porque me ha pasado esto un par de veces. El proyecto se construye bien, luego acaba y se niega a hacerlo con lo que parece ser una pequeña razón.

mikestew
fuente
Voy a empezar un proyecto nuevo. Oh, pozos.
Gabe Shahbazian
Puede corregir la configuración de compilación de "Rutas de búsqueda de marcos" desde el panel de información de un objetivo.
John Cromartie
Recibí el error pero no tuve los problemas de framework descritos anteriormente. Curiosamente, en una computadora, el proyecto se pudo verificar de SVN y construir bien, mientras que en otras dos, de repente resultó en este error en cada compilación. La única solución (y bastante simple), después de probar todo tipo de otras soluciones, fue crear un nuevo proyecto en blanco y mover todos los archivos a él.
mmattke
Este método funcionó para mi. Tenía un conjunto de proyectos de trabajo que de repente dejó de compilarse para exactamente una configuración un día. Sin razón. Usé la técnica textmate anterior y noté que "$ (SDKROOT) / Developer / Library / Frameworks" faltaba en esa configuración. No tengo idea de por qué, y no pude ver esto usando Xcode.
Rob
4

"Editar la configuración del proyecto" y buscar "Rutas de búsqueda" Hay un campo para "Rutas de búsqueda del marco". ¡¡eliminar todos!!

Litebeam
fuente
4

A mí también me pasó aquí. Gracias a un gran socio, encontramos la respuesta. Su Xcode puede estar apuntando al simulador ... cámbielo a un dispositivo IOS en su lugar ... construido sin problemas después ...

j2emanue
fuente
1

Ejecute el comando de archivo en el marco desde la Terminal:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Debería recibir un mensaje que le indique con qué arquitecturas es compatible el binario UIKit. Si no ve "i386" en la lista, entonces de alguna manera ha logrado eliminar la versión i386 de UIKit, lo que significa que no puede compilar para el simulador. Para solucionarlo, tendrá que volver a instalar el SDK.

Si obtiene algún otro error, es de esperar que le ayude a descubrir cuál es el problema real.

Mark Bessey
fuente
Reinstalé el sdk y todavía obtengo el mismo error de compilación exacto.
Gabe Shahbazian
estoy teniendo este problema. ya comprobado el marco y la ruta de la biblioteca y están limpios. el archivo de comando /Developer/Platforms.../UIKit.framework/UIKit solo dice "Mach-O dinámicamente vinculado brazo de biblioteca compartida". ¿Es realmente necesario instalar todo el SDK? ¿O puedo copiar la versión completa del marco?
Alexander Fradiani
¡Es bueno aprender! en mi caso, armv7 e i386 están ahí, ¡pero no armv6!
Nianliang
1

Solo quiero hacerles saber que en mi caso, estaba teniendo el mismo problema, me di cuenta de que tenía una carpeta Xcode más antigua llamada Xcode3.1.3. Simplemente le cambié el nombre porque era una versión anterior y eso hizo la magia por mí.

Raya2
fuente
1

Compruebe las rutas de búsqueda de su biblioteca en la configuración de destino. A veces, se ingresan bibliotecas tontas allí y esto le dará un error similar.

Puede eliminar todas las entradas en esta sección.

Atma
fuente
0

Acababa de experimentar algo ligeramente diferente, porque trabajo en mi propia biblioteca (WM_GSRecognizerLib), pero el error es el mismo.

Qué pasaría: debido a algunas actualizaciones, la ruta que apuntaba a la biblioteca a incluir (.a) era de la carpeta "Debug-iphoneos" (donde se genera). La compilación para dispositivos iOS genéricos funcionó bien, pero no para el simulador, quejándose de la falta de arquitectura i386.

Lo que hice para este problema fue incluir también los binarios de la carpeta "Debug-iphonesimulator".

Puede ser útil para este tema, porque la explicación está aquí: los dispositivos requieren binarios para arm64 / armv7 / armv7s, mientras que el simulador necesita i386.

tontonCD
fuente
0

Mi solución fue establecer la depuración del objetivo del simulador SÍ, solo mire el estado de git para ver la nueva línea agregada como arquitectura solo en .project. si no configura esto, la compilación se ejecutará en todas las arquitecturas y mostrará alguna arquitectura faltante como i386 u otra. TENGA EN CUENTA QUE, obviamente, el problema principal es utilizar algún marco que implemente algún tipo de arquitectura específica.

Guilherme Pedriconi
fuente
-1

Yo también obtuve el mismo error, estoy usando la versión 4.0.2 de xcode, así que lo que hice fue seleccionar el archivo del proyecto xcode y de allí seleccioné la opción Target, pude ver la aplicación de mi proyecto, así que hice clic en ella y fui a la compilación opción de configuración.

Su en la opción de búsqueda escribí la ruta de búsqueda de Framework , eliminé todas las configuraciones y luego hice clic en el botón de compilación y eso funcionó para mí muy bien,

Gracias y saludos

Base
fuente