2011-01-29 20 views
104

Al intentar compilar con Xcode, estoy consiguiendo el error siguiente:símbolo (s) no encontrado para la arquitectura i386

**Ld /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher normal i386 
    cd /Users/doronkatz/Sites/xCode/iKosher 
    setenv MACOSX_DEPLOYMENT_TARGET 10.6 
    setenv PATH "/Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin:/Xcode4/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin" 
    /Xcode4/Platforms/iPhoneSimulator.platform/Developer/usr/bin/gcc-4.2 -arch i386 -isysroot /Xcode4/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator4.2.sdk -L/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -L/Users/doronkatz/Sites/xCode/iKosher -F/Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator -filelist /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Intermediates/iKosher.build/Debug-iphonesimulator/iKosher.build/Objects-normal/i386/iKosher.LinkFileList -mmacosx-version-min=10.6 -all_load -ObjC -Xlinker -objc_abi_version -Xlinker 2 -lz -framework Security -framework CFNetwork -framework CoreData -framework Foundation -framework UIKit -framework CoreGraphics -framework QuartzCore -o /Users/doronkatz/Library/Developer/Xcode/DerivedData/iKosher-bphnihrngmqtkqfgievrrumzmyce/Build/Products/Debug-iphonesimulator/iKosher.app/iKosher 

Undefined symbols for architecture i386: 
    "_UTTypeCreatePreferredIdentifierForTag", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_UTTypeCopyPreferredTagWithClass", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_kUTTagClassMIMEType", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_kUTTagClassFilenameExtension", referenced from: 
     +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o 
    "_SCNetworkReachabilitySetCallback", referenced from: 
     -[Reachability startNotifier] in Reachability.o 
    "_SCNetworkReachabilityScheduleWithRunLoop", referenced from: 
     -[Reachability startNotifier] in Reachability.o 
    "_SCNetworkReachabilityUnscheduleFromRunLoop", referenced from: 
     -[Reachability stopNotifier] in Reachability.o 
    "_SCNetworkReachabilityCreateWithName", referenced from: 
     +[Reachability reachabilityWithHostName:] in Reachability.o 
    "_SCNetworkReachabilityCreateWithAddress", referenced from: 
     +[Reachability reachabilityWithAddress:] in Reachability.o 
    "_SCNetworkReachabilityGetFlags", referenced from: 
     -[Reachability currentReachabilityStatus] in Reachability.o 
     -[Reachability isReachable] in Reachability.o 
     -[Reachability isConnectionRequired] in Reachability.o 
     -[Reachability isConnectionOnDemand] in Reachability.o 
     -[Reachability isInterventionRequired] in Reachability.o 
     -[Reachability isReachableViaWWAN] in Reachability.o 
     -[Reachability isReachableViaWiFi] in Reachability.o 
     ... 
ld: symbol(s) not found for architecture i386 
collect2: ld returned 1 exit status** 

No está seguro de lo que significa.

Respuesta

91

Si aparece este tipo de cosas de repente, generalmente significa que al proyecto le faltan algunos marcos que necesita. Las bibliotecas y los proyectos dependientes pueden requerir marcos, por lo que si ha agregado uno recientemente, eso puede causar este error.

Para agregar marcos, haga clic con el botón derecho en el nombre del proyecto en la vista del proyecto, seleccione Add, luego seleccione Existing frameworks... de la lista. Luego encuentra el marco con los símbolos que te faltan.

En cuanto a cómo encontrar los marcos que necesita, he encontrado que el uso de google es más fácil, aunque probablemente también podría utilizar la búsqueda de ayuda de Xcode. Busque uno de los símbolos y haga todo lo posible para calcular el nombre no marcado (por ejemplo, SCNetworkReachabilityGetFlags), y luego el primer enlace de documentación que encuentre en developer.apple.com suele ser el correcto. Usualmente no tienes que cazar muy lejos. En este caso, eso es esta página:

https://developer.apple.com/documentation/systemconfiguration/scnetworkreachability-g7d

A continuación, en la parte superior de la página, que te dice qué marco a utilizar, SystemConfiguration en este caso. Así que agréguelo al proyecto y vuelva a compilar.

A continuación, sólo seguir haciendo esto hasta que funcione ...

Editar: Nunca he utilizado el simulador, pero esto es lo que se hace en el dispositivo - supongo que es lo mismo ...

4

¿Su proyecto depende de otro proyecto y ese es un objetivo en ese proyecto configurado para ser una dependencia directa de su objetivo principal? Si este es el caso y la dependencia no está configurada, es posible que el destino dependiente no se genere para todas las configuraciones (es decir, el simulador)

Solo una conjetura descabellada.

30

Lo resuelto mediante el siguiente método (por XCode 4):

1) Seleccione el proyecto en la ventana de navegación del proyecto que mostrará el resumen del proyecto a la derecha

2) Seleccione cuarta pestaña construir fases

3) Seleccionar la opción binaria Enlace con la biblioteca

4) Añadir marco para el que está recibiendo

5) Mueva el marco de la carpeta principal a los marcos carpeta

6) Construir una y errores se han ido.

+0

Gracias. Encontré esta respuesta en busca de MFMailCompose, y la resolví agregando MessageUI.framework –

3

Otra situación que puede causar este problema es si su código llama a C++ o si lo llama el código C++. Tuve un problema con la función de utilidad de mi archivo .c que aparece como "símbolo no encontrado" cuando se llama desde Obj-C.La solución fue cambiar el tipo de archivo: en Xcode 4, use el panel de información extendida para establecer el tipo de archivo como "Fuente Objective-C++"; en Xcode 3, use "Obtener información" para cambiar el tipo de archivo a "source.cpp.objcpp".

7

Asegúrese de que el marco que falta realmente se enumera bajo "Target/Build Phases/Link Binary With Libraries" si no acaba de agregarlo. Como se mencionó anteriormente, generalmente indica un marco faltante.

En mi proyecto había dos marcos idénticos enumerados, cuando eliminé uno de ellos tuve este error, porque también lo eliminó de la lista "Enlace binario con bibliotecas". Añadí de nuevo y el problema desapareció (y todavía tengo dos marcos enumerados)

63

A veces hay archivos fuente que faltan en su destino.

  1. examinar qué símbolos faltan
  2. Destino-> construir fases:> compilar código fuente
  3. añadir los archivos de origen que faltan si no se enumeran
  4. comando + B para la dicha

Puede seleccionar los archivos que parecen "perder" y verificar en la barra de herramientas de la derecha que sus casillas de verificación están seleccionadas para el objetivo que está creando.

+1

Esto a menudo puede ocurrir al fusionar dos archivos de proyecto inocentemente y perderse la membresía objetivo. –

+1

Muchas gracias, de alguna manera xcode no ha agregado el archivo .m requerido en la etapa de creación de fases. – dreampowder

+1

Gracias :) Agregue 2 archivos al proyecto y solo después de hacer esos pasos todo fue O.K – user1105951

16

pensado agregar mi solución para esto, después de pasar unas horas en el mismo error :(

Los chicos arriba fuera cierto que la primera cosa que debe hacer es comprobar si se había pasado por alto la adición de ningún marcos, consulte la medidas proporcionadas por Pruthvid arriba.

Mi problema, se vio después, era una clase de compilación desaparecidos tras lo he borrado, y más tarde añadió que de nuevo.

Comprobar sus "fuentes compilar" como se muestra para el reportado clases de error. Agregue las clases que faltan que creó.

+2

GRACIAS ... Esto funciona para mí. Estaba implementando una clase personalizada. Copió ambas clases personalizadas. h y .m en el proyecto. Hice un #import en él, aún aparece el error. ¡Agregar la clase personalizada '.m en la sección "Compilar fuentes" lo resolvió! – GeneCode

+0

¡Impresionante! Tuve el mismo problema que Rocotilos, importé una clase personalizada, importé, pero aún tenía problemas. Esto hizo el truco! ¡Muchas gracias! – Souleiman

3

En mi caso, ninguna de las soluciones publicadas funcionó. Tuve que eliminar el proyecto y realizar una nueva comprobación desde el servidor SVN. Por suerte, el proyecto fue alojado en un sistema de control de versiones. No sé lo que haría de lo contrario.

0

Otra razón por la que esto podría estar sucediendo es cuando ACTUALIZAS un SDK.

Si simplemente elimina el grupo, y luego arrastra y suelta la nueva carpeta para proyectar, la "Ruta de búsqueda de la biblioteca" tendrá ambos SDK. Para resolverlo, simplemente borre la ruta del SDK anterior.

1

En un proyecto de C++ utilizando un definido a plantillas clase, mientras se recibe el mismo error, que selecciona el archivo .cpp con el definido a plantillas clase en el Navegador de proyectos, a continuación, en Eliminar> Eliminar de referencia. También el archivo .h asociado, al tiempo que se hace referencia en el proyecto, tiene que tener una instrucción # include a la .cpp de la siguiente manera:

#ifndef __CircularBuffer__CircularBufferT__ 
#define __CircularBuffer__CircularBufferT__ 

... snip ... 

#include "CircularBufferT.cpp" 
#endif /* defined(__CircularBuffer__CircularBufferT__) */ 

Si desea ver un ejemplo sencillo proyecto es on github:

Esto es un poco de engaño indirecto y no recuerdo la fuente original de esta solución.

5

que fija un error similar en mi proyecto modificando la configuración Crecimiento> Arquitecturas para TODO de mis objetivos.

El problema: Cuando he actualizado desde Xcode 4.4 a Xcode 4.5, mi proyecto compilado todavía muy bien en el simulador, pero no recogió en los dispositivos. En los dispositivos arrojó el error "símbolo (s) no encontrados para la arquitectura armv7s," junto con el engañoso "Apple Mach-O Linker Error" y "clang: error: el comando del enlazador falló con el código de salida 1 (use -v para ver invocación). "

La causa (en mi caso): Mi proyecto tenía múltiples objetivos, y aunque los configuración de generación> Arquitecturas para la objetivo principal se fijó para incluir armv7s arquitectura, el objetivo principal depende de otro blanco (enumerados bajo Build Faces> Dependencies), y no había pensado en restablecer Build Settings> Architectures para ese otro objetivo, y tuve que cambiar eso para incluir armv7s. Supongo que el simulador y el dispositivo se ejecutan en diferentes arquitecturas, y es por eso que el simulador estuvo bien mientras el dispositivo no.

1

Si este error aparece repentinamente, significa que al proyecto le faltan algunos marcos. Las bibliotecas y los proyectos dependientes pueden requerir marcos, por lo que si ha agregado uno recientemente, eso puede causar este error.

Para agregar marcos, haga clic con el botón derecho en el nombre del proyecto en la vista del proyecto, seleccione Agregar, luego seleccione Marcos existentes de la lista. Luego encuentra el marco con los símbolos que te faltan.

La otra cosa es si agregó cualquier clase en los recursos compilados y eliminó esas clases del proyecto, entonces aparece el error. Lo mejor que puede hacer es eliminar las clases de los recursos de compilación (Configuraciones de compilación -> compilar fuentes) que se han eliminado del proyecto.

En mi caso he agregado las clases de admob en el proyecto y he compilado el proyecto. En un caso posterior, no quiero incluir admobs en mi proyecto, así que eliminé las referencias de las clases admob de mi proyecto. Cuando ocurrió este error, eliminé la clase .m de mi admob de los recursos de compilación resuelto este problema.

1

Esto me sucedió al intentar copiar la biblioteca de demostración PSPDFKIT en mi proyecto. Seguí todas las instrucciones en el sitio + todas las sugerencias en esta página ... por alguna razón siguió dando el error anterior, el problema fue que si agrupé el mensaje en el método de error ... solo apareció en el binario (obviamente no tengo acceso al código fuente b/c tengo que pagarlo).

me di cuenta de esto en la página de instrucciones sin embargo:

enter image description here

así que fui a las entrañas de ese archivo de configuración y encontré esto:

OTHER_LDFLAGS=$(inherited) -ObjC -fobjc-arc -lz -framework CoreText -framework CoreMedia -framework MediaPlayer -framework AVFoundation -framework ImageIO -framework MediaPlayer -framework MessageUI -framework CoreGraphics -framework Foundation -framework QuartzCore -framework AVFoundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -weak_framework UIKit 

Luego fui al proyecto de ejemplo proporcionado por el autor de dicha biblioteca ... y noté que las banderas anteriores fueron copiadas literalmente a las otras banderas del enlazador en mi configuración de construcción ... sin embargo en mi proyecto ... ¡no lo fueron! ... Así que simplemente las copié y las pegué en el proyecto de mi proyecto d configura otras banderas enlazadoras y todo funcionó!

punto de partida: si confía en algún archivo .xcconfig en su configuración, verifique con una fuente de código de muestra o algo así y asegúrese de que se haya aplicado realmente ... no se aplicó correctamente en mi caso

15

el problema es que la pertenencia de destino para el agregado presentado no se encuentra a la meta aplicación .So seleccione el archivo y añadir la marca de verificación a la caja de la membresía objetivo

por ejemplo, si se muestra el error en la definición de un método de common.m enter image description here

+0

+1 para usar el Panel :) – WaaleedKhan

+0

Recibí este error de Símbolo no encontrado pero la situación era mucho más simple. Agregué un nuevo módulo (archivo) con una nueva función que necesitaba para uno de mis Esquemas. Cuando construí un esquema diferente unas semanas más tarde, no se encontró la llamada a esa función. Agregarlo al objetivo era todo lo que se necesitaba. – Will

0

He usado un CLGeocoder sin agregar un Core.Location Marco de referencia. Básicamente, este error puede significar muchas cosas. Espero que esto ayude a alguien más.

0

Me he quedado perplejo con esta antes solo al darme cuenta de que agregué una interfaz @ solo de datos y olvidé agregar el bloque @implementation vacío.

Cuestiones relacionadas