Este problema ha sido me vuelve loca, y yo no se puede averiguar cómo solucionarlo…

    Undefined symbols for architecture armv7:
  "_deflateEnd", referenced from:
      -[ASIDataCompressor closeStream] in ASIDataCompressor.o
  "_OBJC_CLASS_$_ASIDataDecompressor", referenced from:
      objc-class-ref in ASIHTTPRequest.o
  "_deflate", referenced from:
      -[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
  "_deflateInit2_", referenced from:
      -[ASIDataCompressor setupStream] in ASIDataCompressor.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

Creo que tiene que ver con:

ld: symbol(s) not found for architecture armv7

Pero me ha añadido: libz.1.2.3.dylib y no está ayudando, alguien tiene alguna idea?

  • Otra posibilidad no contemplada en ninguna de las respuestas existentes, es que podría ser el uso de la -ObjC otros enlazador de la bandera y así Obj-C de la estática externa de las bibliotecas que se esté usando, lo cual no debe ser visible (como la de Analizar la), son visibles. Ver mi respuesta si este es el caso de: stackoverflow.com/a/26151208/901641
  • Como regla general del pulgar, somethimes XCode da el tipo de errores como el Partido-O y el símbolo no se encuentra en la arquitectura i386 (o de otros) cuando los archivos no se han agregado al proyecto. Yo puede hacer clic derecho en la carpeta del proyecto y hacer «Agregar archivo a la <proyecto>».
  • Usted puede ver los símbolos concretos generados mediante la nm herramienta. La Terminal de la ruta de acceso de la .o archivos, y ejecutar nm -g en el archivo que se llama el símbolo y el que debe tener el símbolo, y usted debería ver si coinciden o no, lo que puede dar pistas para el error. nm -g de archivo.o Usted puede inspeccionar los símbolos de C++ demangled con esto: nm -gC archivo.o
  • Puede alguien de aquí me ayuda por favor? Estoy recibiendo el siguiente error, pero ninguna de las anteriores solución que funciona para mí. Ya he pasado días con todas las opciones posibles. Undefined symbols for architecture armv7: "YGConfig::YGConfig(int (*)(YGConfig*, YGNode*, YGLogLevel, char const*, void*))", referenced from: _YGConfigNew in libyoga.a(Yoga.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)
InformationsquelleAutor Alex Trott | 2011-06-21

37 Comentarios

  1. 502

    Causas Comunes

    Las causas más comunes para «Undefined symbols for architecture armv7» son:

    1. Que importar un encabezado y no enlace con la biblioteca correcta. Esto es común, especialmente para los encabezados de las bibliotecas como QuartzCore ya que no está incluido en los proyectos por defecto. Para resolver:

      • Agregar las bibliotecas correctas en el Link Binary With Libraries sección de la Build Phases.

      • Si quieres añadir una biblioteca fuera de la ruta de búsqueda predeterminada puede incluir la ruta de acceso en la Library Search Paths valor en la construcción de Configuración y agregar
        -l{library_name_without_lib_and_suffix} (por ejemplo. para libz.un uso -lz) a la Other Linker Flags sección de Build Settings.

    2. Que copiar los archivos a su proyecto, pero se olvidó de comprobar el destino para agregar los archivos a. Para resolver:

    3. Que incluyen una biblioteca estática que se genera para la arquitectura de otro como i386, el simulador en el equipo host. Para resolver:

      • Si tiene varios archivos de la biblioteca de las bibliotecas de proveedores para incluir en el proyecto deberá incluir el uno para el simulador (i386) y el uno para el dispositivo (armv7 por ejemplo).

      • Opcionalmente, puede crear un la grasa biblioteca estática que contiene ambas arquitecturas.


    Original Respuesta:

    No se ha vinculado en contra de la correcta libz archivo. Si hace clic derecho en el archivo y mostrar en finder su camino en algún lugar debe ser en una carpeta sdk de iOS. Aquí está la mía por ejemplo

    /Desarrollador/Plataformas/iPhoneOS.plataforma/Desarrollador/SDKs/iPhoneOS4.3.sdk/usr/lib

    Recomiendo la eliminación de la referencia y, a continuación, vuelva a agregar de nuevo en el Enlace Binario Con la sección de Bibliotecas de construcción de las Fases de su destino.

    • También puede ser debido a que usted necesita para añadir la palabra «-licucore» en la configuración del proyecto / Otros Enlazador. Se agregan automáticamente para mi generación de depuración, pero no la liberación de uno así que no compila.
    • Yo tenía el mismo problema. En realidad no leer el instalar las notas correctamente de modo que no se ha dado cuenta de que la nueva versión de bugsense necesidades libz binario añadido en la construcción de las fases.
    • ¿Estás seguro de que has incluido un @de implementación de la sección respectiva .m de archivo para todas las clases que se han declarado en el archivo de encabezado?
    • Solo quiero añadir creo que fue muy respetuoso con usted para hacer referencia a otra respuesta a esta pregunta y nos dicen que hasta el voto que si que ha ayudado.
    • Gracias por la ayuda! 🙂 Me ayudó a escribir explícitamente en Otros Enlazador sección: -framework <FrameWorkName>. Tuve problema con XCTest, así que tuve que agregar -framework XCTest. Gracias! 🙂
    • Tuve que esto suceda debido a la #1 donde tuve el mismo nombre de la biblioteca dos veces en la ruta de búsqueda de biblioteca y fue a recoger el mal, incluso cuando cambia el orden de los directorios en Xcode de la configuración del proyecto. Una vez que me quita la incorrecta biblioteca .un archivo que se fija.
    • Puede alguien de aquí me ayuda por favor? Estoy recibiendo el siguiente error, pero ninguna de las anteriores solución que funciona para mí. Ya he pasado días con todas las opciones posibles. Undefined symbols for architecture armv7: "YGConfig::YGConfig(int (*)(YGConfig*, YGNode*, YGLogLevel, char const*, void*))", referenced from: _YGConfigNew in libyoga.a(Yoga.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

  2. 197

    Tuve un problema similar la noche anterior y el problema estaba relacionado con el hecho de que me había arrastrado una clase desde el Finder a mi proyecto en Xcode.

    La solución era ir a la la construcción de las Fases de la ficha y, a continuación, la Compilación de Fuentes y asegúrese de que arrastre la clase a la lista.

    • Me gustaría que me había dado cuenta de que esta era la respuesta que estaba buscando anterior – Alternativamente, usted puede asegurarse de comprobar la ‘Agregar a los objetivos’ cuando la copia de clases.
    • Whoa…así que me alegro de la revisión fue tan fácil! Para ser claros, si se agrega una clase arrastrando desde el finder en tu proyecto de XCode no siempre añadir a tu fases de construcción de la lista al parecer. Me acaba de golpear el botón «+» en «Compilar Fuentes» en virtud de la construcción de las fases, agregado todos los archivos no deseados, y se compila en seguida.
    • Wow. Apple realmente debe reconsiderar sus mensajes de error.
    • Otra forma de solucionar este problema es seleccionar el archivo que se dice que se han perdido. y abrir el «Utilidades» deslice hacia fuera de la barra. (Eso es el extremo de la derecha) Y seleccione el Archivo «Inspector». A continuación, asegúrese de que hay una marca de verificación en el proyecto en «Destino de Pertenencia». Estoy usando Xcode 4.6.2
    • Yo no sabía que el archivo que faltaba, así que me mostró las Fases de construcción en el asistente de editor de la segunda edición de la vista). Abrí el archivo que se ofende en la parte izquierda de la vista de edición y comprobado que cada uno de los archivos importados existido en la construcción de las Fases. He añadido el que no lo hizo y fue resuelto.
    • De acuerdo con Rubén. Después de trabajar con Visual Studio y Netbeans, Xcode es una verdadera decepción (tan ridículamente complicado).
    • Puede alguien de aquí me ayuda por favor? Estoy recibiendo el siguiente error, pero ninguna de las anteriores solución que funciona para mí. Ya he pasado días con todas las opciones posibles. Undefined symbols for architecture armv7: "YGConfig::YGConfig(int (*)(YGConfig*, YGNode*, YGLogLevel, char const*, void*))", referenced from: _YGConfigNew in libyoga.a(Yoga.o) ld: symbol(s) not found for architecture armv7 clang: error: linker command failed with exit code 1 (use -v to see invocation)

  3. 37

    Tuve un problema similar y tuve que comprobar «Construir Activo de la Arquitectura Sólo» en cada una de las configuraciones del Proyecto (Depuración, de Liberación y Despliegue) y en la Configuración de generación del Destino.

    • También hizo el truco para mí. Sólo fue necesaria en el proyecto principal, aunque.
    • Me encuentro con los mismos problemas. El Build Active Architecture Only opciones de configuración son diferentes entre Pods y mi proyecto. En el enlace de la etapa, pero no pudo.
  4. 14

    Tuve un problema similar con eso. El nombre de la clase después de _OBJC_CLASS_$_ en realidad era mi clase. La razón era que yo no marcar la casilla «Añadir Destino» cuando me arrastre los archivos de código fuente en la lista de navegación.

    Mi solución fue:

    1. eliminar la clase de la lista de navegación y seleccione «eliminar la referencia solamente»

    2. arrastre los archivos de código fuente de nuevo y asegúrese de que la casilla de verificación «complemento de Destino» está marcada. La casilla que se encuentra justo debajo de «Copia si es necesario» y «Crear grupo».

    • Sólo para agregar: aunque esta NO es LA CAUSA MÁS COMÚN para el error, acabo de su respuesta (no marcar la casilla) a pasar conmigo ahora.
  5. 8

    Normalmente hay un alias sin el identificador de la versión que está vinculado a la versión actual, en este caso libz.dylib está vinculado a libz.1.2.5.dylib. El uso de la base de alias en lugar de la versión uno.

  6. 5

    El marco de la Meta -> Configuración de generación -> Apple compilador LLVM idioma:
    la configuración de ‘Lenguaje C++ Dialecto» y «Estándar de C++ Library» para el Compilador por defecto ayudó a resolverlo.

  7. 5

    Sólo he añadido el libz.1.2.5.dylib a mi proyecto y trabajó como un encanto.

    Pasos

    1. Ir a la construcción de las Fases.
    2. Vínculo Binario Con biblioteca – utilice el botón ‘+’ para elegir los marcos y las bibliotecas para agregar.
    3. Seleccione libz.1.2.5.dylib de la lista.
    4. Construir y ejecutar.
  8. 5

    Tuve un problema similar y vio los errores relacionados con «std::»

    He cambiado Construir Configuración -> Apple LVM 5.0 – Lenguaje C++ -> el Estándar de C++ Biblioteca de

    de libc++ (LLVM de la Biblioteca Estándar de C++ con C++11)
    a libstdc++ (C++ de GNU de la Biblioteca Estándar)

  9. 5

    Tuve el mismo problema cuando uso admob de la biblioteca, me fijo el cambio de «Arquitecturas» a «Estándar arquitecturas armv7, armv7s» sin la inclusión de 64 bits. Undefined symbols for architecture armv7

  10. 4

    He de tener múltiples @interfaces en el .h archivo y todavía no se incluyó a la totalidad de la correspondiente @la aplicación de las directivas. Asegúrese de que todos ellos están equilibrados.

  11. 4

    Si usted tiene la bandera -ObjC en virtud de su Destino > Configuración de generación > Otros Enlazador y usted está recibiendo este problema, considere la posibilidad de quitarla. Si usted intencionalmente agregado debido a que usted necesita para cargar algunos Obj-C código de una biblioteca estática que normalmente no se cargan en caso contrario, es decir, un Obj-C categoría, entonces usted debe utilizar -force_load <path> en lugar de -ObjC.

    <path> debe ser relativa a su proyecto de Xcode directorio. Es decir, si la estructura de directorios se parece a esto:

    iOSProject
      + iOSAPI.framework
          + iOSAPI
      + iOSAPI.xcodeproj

    Entonces usted debe tener este indicador establecido para Other Linker Flags:

    -force_load iOSAPI.framework/iOSAPI

    Si desea incluir varias bibliotecas así, entonces usted debe incluir un aparte -force_load línea para cada uno de ellos.

    -force_load iOSAPI.framework/iOSAPI
    -force_load another.framework/another
  12. 4

    He aquí cómo tengo este problema:

    He añadido un .h, .m y PUNTA de otro proyecto arrastrándolos dentro de mi navegador de proyectos. Xcode no agregarlos a la construcción de las Fases correctamente.

    De verificación mi respuesta porque he tenido un problema similar que yo era capaz de resolver haciendo algunos pasos.

  13. 3

    si usted está tratando con el iOS5 actualización, he encontrado que para la compilación de un proyecto por escrito a la meta 4.3, me podría cambiar el nombre de libz.1.2.3.dynlib en el Navegador de Proyectos para libz.1.2.5.dynlib y compilado.

    Mi iPhoneOS50SDK/usr/lib carpeta no tiene libz.1.2.3.dynlib–no sé si es una beta cosa o simplemente natural de la actualización.

  14. 3

    Probablemente algunas de las clases que faltan de su destino. Esto generalmente sucede cuando usted renombrar/eliminar/añadir nuevas clases de archivos a su proyecto. Para solucionar agregar el recién agregado clases a algunos de los objetivos.

    Seleccione la clase en el Navegador de Proyectos (barra lateral derecha) , abrir las Utilidades de la sidebar (barra lateral derecha), de las Utilidades seleccione el Inspector de Archivo (archivo como icono), bajo el Objetivo de la Membresía de la ficha de la garrapata de sus objetivos. Todo esto es para evitar la «Quitar de referencia» y añadir de nuevo con el tictac de «Agregar a» destinos de truco.

    Así: Seleccione la Clase -> Utilidades (Archivo en el Inspector) -> Objetivo de Pertenencia -> Garrapata a los objetivos que usted desea.

  15. 2

    No encontré esta sugerencia aquí, así que aquí va:
    si el proyecto tiene más de un objetivo (es decir, uno para OSX y uno para iOS) a continuación, debe vincular la correspondiente bibliotecas para cada destino.. por ejemplo en mi caso necesitaba AudioToolbox.. he tenido que añadir una vez para OSX y una vez para iOS (en virtud de la marcos carpeta, debe tener un duplicado de cada biblioteca para cada objetivo.. si ves sólo uno.. entonces que es una bandera roja)

    • Esta respuesta me ayudó. Sin embargo, mi situación era aún más sencillo… simplemente me olvidé de agregar un marco que mi base de referencia. En mi caso yo no se pudo cargar AVFoundation.marco.
    • Sí, simplemente me olvidé de agregar un marco bajo el «Vínculo Binario con las Bibliotecas de fase».
  16. 2

    Me enfrentaba a un problema con PJSIP bibliotecas,

    Probado el siguiente en otros enlazador en el proyecto y son capaces de resolver el error:
    -marco
    Fundación
    -marco
    UIKit

    Por encima del enlazador se utilizan en Siphone Proyecto en github. Estas opciones le ayudará a resolver los problemas relacionados con la vinculación de las bibliotecas de C++.

    • Estoy teniendo el mismo problema con PJSIP librabries, se Puede explicar de la solución en detalle
    • Establezca los siguientes valores en otros enlazador de generación de proyecto de ajuste: -marco de la Fundación -framework UIKit
    • ¿Cuál es el mensaje de error que estás recibiendo ?
    • Mensaje de Error: ignorar archivo /Users/usuario/Downloads/pjproject-2.7.2/pjsip-apps/src/pjsua/ios/libyuv.un archivo, fue construido para el archivo que no es la arquitectura, que está vinculado (i386): /Users/usuario/Downloads/pjproject-2.7.2/pjsip-apps/src/pjsua/ios/libyuv.una Undefined symbols for architecture i386: «_pjsip_register_method», hace referencia a partir de:
    • Parece que están tratando de ejecutar la aplicación en el simulador y libyuv.una no está construido para el simulador de la arquitectura i386. intente ejecutar la aplicación en el dispositivo directamente
    • Quiero integrar Pjsip en Swift. Yo intenté crear puentes encabezados, pero no funcionó. Me puedes dar alguna idea?

  17. 1

    Finalmente he descubierto, he resuelto este problema mediante la adición de ausente marco a la meta->Fases de construcción->Link Binario Con las Bibliotecas

  18. 1

    Una vez tuve este problema. Me di cuenta de que mientras se mueve de una clase, me había sobrescrito la .mm archivo con .h archivo en la carpeta de destino.

    Arreglar ese problema se ha corregido el error.

  19. 1

    He recibido el ‘Undefined symbols for architecture armv7:’ error al intentar compilar un proyecto que tenía el objetivo de crear valor para ‘Estándar de C++ Biblioteca de la’ a ‘libc++’ (necesario a medida que el proyecto fue el uso de algunas características de C++ 11), y el proyecto incluía un sub-proyecto que tenía la misma configuración se establece en ‘libstdc++’ (o compilador por defecto como es actualmente).

    Cambiar el sub-proyecto de «Estándar de C++ Biblioteca de’ configuración de libc++ fijo, pero sólo después de la primera vez que se define el destino de la implementación de los sub-proyecto a 5.0 o superior (5.0 es necesario para libc++).

  20. 1

    Puedo dar más sugerencias que usted puede comprobar cuando otras sugerencias comunes no son de ayuda.

    Si el vínculo con otro proyecto(libxxx.a) puede a veces extraño problema que se puede encontrar el símbolo con herramientas como nm, pero que simplemente no puede encontrar los símbolos en la ld. Entonces usted debe comprobar si los dos proyectos se han construido en el mismo banderas, algunos de ellos pueden afectar el formato binario.

    1. de verificación compilador de c++.
    2. de verificación c++ dialecto de configuración.
    3. de verificación c++ runtime tipo de apoyo. (-frtti/-fnortti)
    4. comprobar si existe .una con el mismo nombre aparece en otra parte, podría ser más allá de la querían archivo en la ruta de enlace de la lista. eliminarlos.
  21. 1

    Tengo este problema, cuando ejecuto la aplicación en iphone5s, fue resuelto por agregar arm64 a Arquitecturas.

  22. 1

    Yo tenía el mismo problema. He intentado todo, desde la enorme lista de responder, pero al final era mi problema:
    Estoy trabajando con openCV, así que hay que combinar el código de C++ en mi código. Para hacer esto usted debe cambiar los archivos que el uso de objective-c y C++.mm
    No he cambiado un archivo y este archivo no tiene ninguna conexión con el código de C++, pero tuve que cambiarlo.

  23. 1

    Tuve este problema, al instalar shareKit. Trabajó en el simulador, pero no en el dispositivo. He eliminado -all_load de la Otros Enlazador de la Bandera y todo funciona bien tanto en simulador y dispositivo iphone.

  24. 1

    En mi caso, yo había añadido un marco que debe ser usando Objective C++. He encontrado este post:

    XCode .m frente .mm

    que explica cómo el principal.m necesario cambiar el nombre a la principal.mm por lo que el Objetivo-clases de C++ puede ser compilado, demasiado.

    Que se fija para mí.

  25. 1

    Para mí, el problema era que yo olvidar para establecer el valor de mis constantes en la .m (implementación)

    file const kFooKey = @"Foo";
  26. 1

    También he añadido los archivos a través de Arrastrar y Soltar. Lo que yo hice, se me han quitado las referencias de todos los archivos (Excepto frameworks) luego agregó de nuevo correctamente a través de Agregar Archivos Al Proyecto opción, el problema se ha ido.

  27. 1

    Si usted está construyendo a partir de Unity3D 5 y también el uso de un Prime31 plugin y usted está recibiendo este error es debido probablemente a un duplicado .dll. Si se mira a través de sus advertencias en la Unidad del editor de uno de ellos le dirán esto y advierten que podría causar errores de compilación. A ver si este es el caso, escriba P31 en el proyecto campo de búsqueda y aparecerá a la derecha arriba, tal vez incluso más de uno. El duplicado tendrá un ‘1’ al final del nombre de archivo. Esto es probablemente causado por la actualización del plugin de editor a través de la tienda o el Prime31 ficha de menú.

  28. 1

    Para lo que vale, el mío era fijo, después me fui a la meta->Fases de construcción->Link Binario Con las Bibliotecas, se elimina la libstdc++.tbd referencia, entonces se agrega una referencia a libstdc++.6.0.9.tbd.

  29. 0

    Me estaba enfrentando el mismo problema al incluir a una tercera parte del marco.

    El problema se resolvió cuando me he quitado armv7s de la Validez de las Arquitecturas de entrada en la Configuración de generación del destino, comienza a trabajar.

  30. 0

    cambiar el nombre de tu m de archivo (que incluye los métodos funcs) a mm o viceversa va a solucionar su problema.
    mina resuelto el cambio de nombre de mm a m
    o m a mm.

  31. 0

    Intentar poner en práctica al menos una no-inline función de la clase derivada. Si usted no hace esto, el enlazador puede evitar la creación de la información de tipo para esa clase.

  32. 0

    En Versión de Xcode 6.3.2 , he resuelto exactamente el mismo problema mediante la adición de la Biblioteca
    libxml2.dylib y libz.dylib En el Enlace Binario Con las Bibliotecas !

  33. 0

    En mi caso, he tenido un problema similar cuando he creado una nueva rama bajo control de código fuente.

    Yo era capaz de resolver este problema simplemente va Product>Clean

  34. 0

    Tuve esta advertencia, cuando escribió dos clases .h archivo de otra clase, pero se me OLVIDÓ escribir la implementación de la clases .m archivo.

Dejar respuesta

Please enter your comment!
Please enter your name here