300 votos

Undefined symbols de la arquitectura armv7

Este problema ha sido me vuelve loca, y no puedo trabajar fuera 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 he añadido: libz.1.2.3.dylib y no es la de ayudar, alguien tiene alguna idea?

498voto

Joe Puntos 37343

Causas Comunes

Las causas comunes de "Undefined symbols de la arquitectura armv7" son:

  1. Usted importación de un encabezado y no vincular en contra de 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 Link Binary With Libraries la sección de los Build Phases.

    • Si desea 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 Configuración de generación y agregar
      -l{library_name_without_lib_and_suffix} (ej. para libz.a uso -lz) a las Other Linker Flags sección de Build Settings.

  2. Se copia los archivos en el proyecto, pero se olvidó de revisar el objetivo de añadir los archivos. Para resolver:

  3. Se incluyen una biblioteca estática que está construido para otra arquitectura 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 una grasa biblioteca estática que contiene ambas arquitecturas.



Respuesta Original:

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

/Developer/Platforms/iPhoneOS.platform/Developer/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.

197voto

Cortex Puntos 1501

Yo tenía 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 fue ir a 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.

37voto

Alex Zavatone Puntos 901

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

21voto

user2166865 Puntos 111

Otra posible causa de "undefined symbol" enlazador errores es intentar llamar a una función de C a partir de una .mm archivo. En este caso deberás utilizar extern "C" {...} cuando la importación de los archivos de encabezado.

Error del vinculador llamada C-Función de Objective-C++

14voto

syoleen Puntos 187

Yo tuve un problema similar con eso. El nombre de la clase después de _OBJC_CLASS_$_ en realidad era de mi clase. La razón era que yo no marque "Añadir a la Meta" 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 únicamente una referencia"

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

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X