símbolo (s) no encontrados para architecture i386

Cuando bash comstackr con Xcode, recibo el siguiente error:

**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 estoy seguro de lo que significa.

Está utilizando ASIHTTPRequest, por lo que necesita configurar su proyecto. Lea la segunda parte aquí

https://allseeing-i.com/ASIHTTPRequest/Setup-instructions

Si aparece este tipo de cosas repentinamente, 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 usar google es más fácil, aunque probablemente también podría usar la búsqueda de ayuda de Xcode. Busque uno de los símbolos, haga todo lo posible para calcular el nombre no registrado (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, esa es esta página:

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

Luego, en la parte superior de la página, le dice qué marco usar, SystemConfiguration en este caso. Así que agréguelo al proyecto y vuelva a comstackr.

Entonces sigue haciendo esto hasta que funcione …

Editar: nunca he usado el simulador, pero esto es lo que haces en el dispositivo, supongo que es lo mismo …

Algunas veces hay archivos fuente que faltan en su objective.

  1. examinar qué símbolos faltan
  2. target-> build phases-> compile source
  3. agregue los archivos fuente faltantes si no están listados
  4. comando + b para bienaventuranza

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 objective que está creando.

Lo resolví usando el siguiente método (para XCode 4):

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

2) Seleccione las fases de comstackción de 4ta pestaña

3) Seleccionar enlace binario con opción de biblioteca

4) Agregue el marco que está recibiendo

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

6) Constrúyelo de nuevo y los errores desaparecen.

Pensé agregar mi solución para esto, después de pasar unas horas con el mismo error 🙁

Los chicos de arriba estaban en lo cierto al decir que lo primero que debes verificar es si te faltó agregar marcos, mira los pasos provistos por Pruthvid arriba.

Mi problema, resultó ser que faltaba una clase de comstackción después de que la borré, y luego la agregué nuevamente.

Verifique sus “fonts de comstackción” como se muestra para las clases de error informadas. Agregue cualquier clase faltante que haya creado.

El problema es que falta la membresía objective para el archivo agregado al destino de la aplicación. Para seleccionar el archivo y agregar la marca de verificación al cuadro de membresía objective

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

Asegúrate de que el marco faltante esté en la lista en “Fases de destino / comstackción / Binario de enlace con bibliotecas”, sino solo agrégalo. Como se mencionó anteriormente, generalmente indica un marco faltante.

En mi proyecto había dos marcos idénticos en la lista, 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 en la lista)

Repare un error similar en mi proyecto al cambiar las Configuraciones de comstackción> Arquitecturas para TODOS mis objectives.

El problema: cuando actualicé de Xcode 4.4 a Xcode 4.5, mi proyecto aún comstackba bien en el simulador pero no comstackba en dispositivos. En los dispositivos arrojó el error “símbolo (s) no encontrados para la architecture 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 la invocación ). ”

La causa (en mi caso): Mi proyecto tenía objectives múltiples, y aunque Build Settings> Architectures para el objective principal estaba configurado para incluir la architecture de armv7s, el objective principal dependía de otro objective (enumerado en Build Fhas> Dependencies), y No había pensado en restablecer las Configuraciones de comstackción> Arquitecturas para ese otro objective, y tuve que cambiar eso para incluir armv7s. Supongo que el simulador y el dispositivo se ejecutan en diferentes architectures, y es por eso que el simulador estuvo bien mientras el dispositivo no.

¿Depende su proyecto de otro proyecto y ese es un objective en ese proyecto configurado para ser una dependencia directa de su objective principal? Si este es el caso y la dependencia no está configurada, es posible que el destino dependiente no esté siendo construido para todas las configuraciones (es decir, el simulador)

Solo una conjetura salvaje.

Otra situación que puede causar este problema es si su código llama a C ++ o 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”.

En mi caso, ninguna de las soluciones publicadas funcionó. Tuve que eliminar el proyecto y hacer un nuevo checkout 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.

En un proyecto de C ++ que utilizaba una clase definida de plantillas , mientras recibía el mismo error, seleccioné el archivo .cpp con la clase de plantillas definidas en Project Navigator, luego eliminé> Eliminar referencia. Además, el archivo .h asociado, aunque todavía se hace referencia en el proyecto, debe tener una sentencia #include en .cpp de la siguiente manera:

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

Si quieres ver, un ejemplo de proyecto simple está en github :

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

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 que si agregaste alguna clase en los recursos comstackdos y eliminaste esas clases del proyecto, aparece el error. Lo mejor que puede hacer es eliminar las clases de los recursos de comstackción (Configuraciones de comstackción -> comstackr fonts) que se han eliminado del proyecto.

En mi caso, he agregado las clases de AdMob en el proyecto y he comstackdo 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 comstackción resuelto este problema.

Esto me sucedió al intentar copiar la biblioteca de demostración de 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:

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 muestra proporcionado por el autor de dicha biblioteca … y noté que las banderas anteriores estaban copiadas literalmente a las otras banderas del enlazador en mi configuración de comstackción … sin embargo, en mi proyecto … ¡no lo eran! … Entonces simplemente copié y pegué en la configuración de construcción de mi proyecto 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 realmente se haya aplicado … no se aplicó correctamente en mi caso

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.

Había usado un CLGeocoder sin agregar un Core.Location Framework. Básicamente, este error puede significar muchas cosas. Espero que esto ayude a alguien más.

Esta vez me quedé perplejo al descubrir que agregué una interfaz de solo datos y olvidé agregar el bloque @implementation vacío.