En XCode 6.1 , estoy recibiendo el error para el iPhone 6, 5s iPhone(iOS 7.1), que dice

    Undefined symbols for architecture x86_64:
      "_OBJC_CLASS_$_ClientAuthenticator", referenced from:
      objc-class-ref in AppDelegate.o
ld: symbol(s) not found for architecture x86_64
linker command failed with exit code 1

Esto es lo que tengo para que la arquitectura de la configuración de la perspectiva

  Architectures : Standard Architectures(armv7, arm64) - $(ARCHES_STANDARD)
  Base SDK : Latest iOS(8.1) 
  Valid Architectures: arm64, armv7, armv7s

  IOS Deployment Target: iOS 6.0

Recientemente he actualizado mi sistema operativo Yosemite y XCode de 6.0 a 6.1. He buscado en Stackoverflow esta cuestión, que se refieren a XCode 5.1 y trató de todas estas soluciones, pero nada ha funcionado.

Actualización – he probado los cambios como se sugiere en la respuesta, pero aún así me sigue apareciendo el error que dice «perdió la arquitectura X86_64» . En la investigación posterior encontré que el archivo ClientAuthenticator.o que es de mi biblioteca no está siendo construido para la arquitectura X86_64 y probablemente ese es el problema? Estoy buscando cómo puede ser construido para la arquitectura x86_64.

Mi nueva pregunta es ¿cuál es la diferencia entre arm64 y x86_64? Más parece que la diferencia entre la arquitectura fabricante, pero básicos de la arquitectura de 64 bits sigue siendo el mismo.

  • Estás usando una biblioteca estática o este error al compilar tu propio proyecto?
  • Compilar mi propio proyecto
  • Así que usted está utilizando una librería de terceros, que no admite la versión de 64 bits (refiriéndose a ClientAuthenticator.m). Pruebe a quitar arm64 de Destino / Build Settings / Arquitecturas / Válido Arquitecturas y, a continuación, compile? Captura de pantalla – i.imgur.com/Rqwr97G.png
  • La biblioteca está escrito por mí, ¿cómo puedo hacer que compatible con la versión de 64 bits?
  • Por lo tanto, ahora que usted está haciendo la pregunta correcta. Voy a publicar una respuesta.
  • x86_64 la arquitectura necesaria para ejecutar el simulador de 64 bits. arm64 arquitectura es necesaria para el funcionamiento de la 64 bits de dispositivo (iPhone 5s, iPhone 6, iPhone 6 Plus, iPad Air, iPad mini con pantalla Retina).
  • Solución Simple Ir a la Meta ->Vinculación -> otros enlazador de la Bandera y agregar $(hereditario) en otros enlazador de la bandera en ambos Debug y Release.
  • usted tiene la respuesta, pero después de ella, no un comentario por favor !!! Gracias de todos modos
  • gracias, publicado: stackoverflow.com/a/36197722/1136128
  • u hizo encontrar la solución para el problema? He intentado de todas las maneras, pero no obtener la solución.
  • Sí, lo hice
  • cómo u resuelto? u puede por favor explicar mí..

InformationsquelleAutor yogsma | 2014-10-24

11 Comentarios

  1. 51
    • La primera cosa que usted debe asegurarse es que la biblioteca estática tiene todas las arquitecturas. Cuando usted hace un lipo -info myStaticLibrary.a en terminal – deberías ver armv7 armv7s i386 x86_64 arm64 arquitecturas para la grasa binario.

    • Para lograr eso, estoy asumiendo que usted está haciendo un binario universal – agregue lo siguiente a la arquitectura de la configuración del proyecto de biblioteca estática –

    XCode 6.1 perdió la arquitectura X86_64 en el archivo

    • Así, se puede ver que tengo que configurar manualmente el Standard architectures (including 64-bit) (armv7, armv7s, arm64) del proyecto de biblioteca estática.

    XCode 6.1 perdió la arquitectura X86_64 en el archivo

    • Como alternativa, desde la normal $ARCHS_STANDARD incluye ahora de 64 bits. Usted también puede hacer $(ARCHS_STANDARD) y armv7s. Compruebe lipo -info sin ella, y vas a averiguar la falta de arquitecturas. Aquí está la captura de pantalla para todas las arquitecturas –

    XCode 6.1 perdió la arquitectura X86_64 en el archivo

    • Para su implementación de referencia (proyecto utilizando la biblioteca estática). La configuración por defecto debería funcionar bien –

      XCode 6.1 perdió la arquitectura X86_64 en el archivo

    De actualización 12/03/14
    Xcode 6 Estándar arquitecturas de excluir armv7s.

    Así, armv7s no es necesario? Sí. Parece que las diferencias generales entre armv7 y armv7s conjuntos de instrucciones son menores. Así que si usted elige no incluir armv7s, el objetivo armv7 código máquina todavía funciona muy bien en 32 bits A6 dispositivos, y apenas se nota la brecha de rendimiento. Fuente

    Si hay una forma más inteligente para Xcode 6.1+ (iOS 8.1 y superiores) – por favor compartir.

    • ¿Por qué usted tiene que especificar exclusivamente ARCHES_STANDARD_INCLUDING_64_BIT , cuando ARCHES_STANDARD debe tener 64 bits
    • Buen punto. La normal $ARCHS_STANDARD incluye ahora de 64 bits. Usted también puede hacer $(ARCHS_STANDARD) y armv7s. La actualización de la respuesta.
    • Si esto ha respondido a su pregunta, por favor, acepte la respuesta haciendo clic en el icono de marca de verificación. Esto lleva fuera de los «sin respuesta» de la lista y aumenta la posibilidad de que las personas responder a sus preguntas futuras.
    • Gracias, voy, pero no ha resuelto mi problema. Yo soy bastante bueno en la aceptación de respuestas si se resuelve mi problema, a veces incluso cuando no. Todavía estoy trabajando en ello.
    • Puede usted explicar la naturaleza de la cuestión? Sólo tienes que añadir un ‘Update’ a tu pregunta – muestra de lo que se hizo después de seguir los pasos anteriores.
    • He cocoaPods instalado en mi proyecto, y conseguir el mismo problema en Xcode 6.1. ¿Tiene alguna sugerencia sobre cómo solucionar este con vainas en proyecto
    • Compruebe el binario, y ver que las arquitecturas faltan. En consecuencia, usted tiene que ajustar la Configuración de generación. Siempre se puede plantear un problema en Github con respecto a las Vainas de Cacao. Muy activo repo.
    • He intentado esto, pero todavía tiene justo: armv7 arm64 armv7s. No x86_64
    • El uso de un Dispositivo iOS como el destino de generación me da: armv7 arm64 armv7s. Si yo uso de un simulador de como construir el destino me da: x86_64. ¿Cómo podemos tener ambos?
    • El truco a la hora de crear una biblioteca estática es hacer que sea universal (se obtiene una sola .un archivo con independencia de cuál sea su destino build es) – ver el tutorial en la sección llamada «Universal Binarios’ aquí. Muy popular lipo script – raywenderlich.com/41377/…
    • Hola por Favor si has encontrado solución, por encima de dado de error de iOS 8 y Xcode 6.1 por Favor, comparta relacionados con zbar…
    • Sea específico acerca de su pregunta. Try – stackoverflow.com/q/22560899/3527656
    • Esto no es trabajar, y la respuesta no es correcta. arm y x86 son dos arquitecturas distintas.
    • Siéntase libre de hacer las modificaciones. Estaba trabajando como de Xcode 6.1

  2. 24

    Si usted está construyendo una biblioteca universal y la necesidad de apoyar el Simulador (x86_64), a continuación, construir el marco para todas las plataformas, mediante el establecimiento de Build Active Architecture Only a No.
    XCode 6.1 perdió la arquitectura X86_64 en el archivo

    • Esto funcionó para mí, pero sólo después de que me puse a «No» para todos los objetivos, incluyendo marcos.
  3. 11

    Muchos usan los scripts de generación encontrar aquí:
    http://www.raywenderlich.com/41377/creating-a-static-library-in-ios-tutorial
    o aquí:
    https://gist.github.com/sponno/7228256 para su ejecute la secuencia de comandos en su destino.

    Me estaba tirando de los pelos tratando de agregar x86_64, i386, armv7s, armv7, y arm64 a las Arquitecturas de la sección, sólo para encontrar lipo -info targetname.a nunca regresar a estas arquitecturas después de una compilación correcta.

    En mi caso, he tenido que modificar el destino runscript, específicamente en el paso 1 de la esencia de enlace, para incluir manualmente las arquitecturas en las que el uso del arco.

    Step 1. Build Device and Simulator versions
    xcodebuild -target ${PROJECT_NAME} ONLY_ACTIVE_ARCH=NO -configuration ${CONFIGURATION} -sdk iphoneos BUILD_DIR="${BUILD_DIR}"
    BUILD_ROOT="${BUILD_ROOT}" xcodebuild -target ${PROJECT_NAME} -configuration ${CONFIGURATION} -sdk iphonesimulator -arch x86_64 -arch i386 -arch armv7 -arch armv7s -arch arm64 BUILD_DIR="${BUILD_DIR}" BUILD_ROOT="${BUILD_ROOT}"

    • Que ha funcionado para mí. Muchas gracias
    • Creo que me estoy encontrando con el mismo problema, pero la adición de arco para mí hace que el xcodebuild comando para terminar en silencio, sin construir nada (yo soy de dumping de salida de los de arriba para /tmp, y me pongo a CONSTRUIR LOGRADO mensaje sin arco, pero no pudo pasar Build settings from command line mensaje de con -arch)
    • Fijo, para mí -arch parámetro no como resultado de una compilación correcta, por alguna razón, a pesar de ajuste de la ALTURA variable de éxito. Sin embargo, la definición de ARCHS='i386 x86_64' como parte de la propia orden se ha solucionado el problema para mí.
  4. 9

    He aquí una respuesta a su última pregunta acerca de la diferencia entre x86_64 y arm64:

    • x86_64 la arquitectura necesaria para ejecutar el simulador de 64 bits.

    • arm64 arquitectura es necesaria para el funcionamiento de la 64 bits de dispositivo (iPhone
      5s, iPhone 6, iPhone 6 Plus, iPad Air, iPad mini con Retina
      de la pantalla).

  5. 4

    Puedo ejecutar exactamente el mismo problema y estaba siguiendo este tutorial
    https://github.com/jverkoey/iOS-Framework#faq

    La forma en que hice este trabajo es después de poner en las secuencias de comandos en el total de la Fase de construcción, antes de compilar, asegúrese de que usted compilar usando un simulador de un iphone (yo usé iPhone6) en lugar de un Dispositivo IOS.

    que me va a dar 2 rebanadas: armv7 y x86_64, a continuación, arrastrar y soltar en el nuevo proyecto, se está trabajando muy bien para mí.

    • Pasó por muchas cosas, pero esto hizo que el truco solo se necesitaba para construir mi marco con un simulador seleccionado. Gracias!
  6. 1

    Mi solución fue conectar mi iPhone 6, construir sobre ella y tengo el proyecto se ejecuta con éxito.

    Porque yo estaba construyendo para el iPhone 6 Simulador.

  7. 0

    Otra cosa a tener en cuenta es que XCode es el mal manejo de la biblioteca de las importaciones, y en muchos casos la solución es encontrar el archivo importado en el proyecto, eliminar en el Buscador o desde la línea de comandos y agregarlo de nuevo, de lo contrario, no se actualiza correctamente XCode. Por XCode dejando allí el archivo antiguo que sigue corriendo en círculos sin entender por qué no es la compilación, la falta de la arquitectura, etc.

  8. 0

    Yo uso lipo comando combinar dos construida bibliotecas estáticas manualmente.

    EX: tengo una biblioteca estática(libXYZ.a) a construir.

    Puedo ejecutar la generación de Generic iOS Device y recibí el Producto en Debug-iphoneos/

    $ lipo -info Debug-iphoneos/libXYZ.a
    Architectures in the fat file: Debug-iphoneos/libXYZ.a are: armv7 arm64

    Entonces corro a construir para cualquier iOS Simulator y recibí el Producto en Debug-iphonesimulator/

    $ lipo -info Debug-iphonesimulator/libXYZ.a
    Architectures in the fat file: Debug-iphonesimulator/libXYZ.a are: i386 x86_64

    Finalmente puedo combinar en uno para contener todas las arquitecturas.

    $ lipo -create Debug-iphoneos/libXYZ.a Debug-iphonesimulator/libXYZ.a -output libXYZ.a
    $ lipo -info libXYZ.a
    Architectures in the fat file: libXYZ.a are: armv7 i386 x86_64 arm64
  9. 0

    Si usted está teniendo este problema en reaccionar-nativo de proyectos con uno de la biblioteca externa. Usted debe eliminar el proyecto y el uso react-native link <package-name> de nuevo. Que debe resolver el problema.

Dejar respuesta

Please enter your comment!
Please enter your name here