símbolo (s) no encontrado para la architecture i386

Cuando bash comstackr con Xcode, obtengo 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: "_UTTypeCreatePrefernetworkingIdentifierForTag", referenced from: +[ASIHTTPRequest mimeTypeForFileAtPath:] in ASIHTTPRequest.o "_UTTypeCopyPrefernetworkingTagWithClass", 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 isConnectionRequinetworking] in Reachability.o -[Reachability isConnectionOnDemand] in Reachability.o -[Reachability isInterventionRequinetworking] 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 de repente, generalmente significa que el proyecto le falta algunos frameworks que necesita. Las bibliotecas y los proyectos dependientes pueden requerir frameworks, por lo que si ha agregado uno recientemente, puede causar este error.

Para agregar frameworks, haga clic derecho en el nombre del proyecto en la vista del proyecto, select Add , luego select Existing frameworks... de la list. Luego encuentra el marco con los símbolos que te faltan.

En cuanto a cómo encuentras qué frameworks necesitas, he encontrado que usar Google es el más fácil, aunque probablemente también podrías usar la búsqueda de ayuda de Xcode. Busque uno de los símbolos, haciendo todo lo posible para calcular el nombre sin enmarcar (p. Ej., SCNetworkReachabilityGetFlags ), y luego el primer enlace de documentation que encontrará en developer.apple.com es a menudo el correcto. Por lo general, no tienes que cazar muy lejos. En este caso, esa es la página:

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

Luego, en la parte superior de la página, le indica qué marco usar, SystemConfiguration en este caso. Entonces agrega eso al proyecto y vuelve a comstackr.

Entonces solo sigue haciendo esto hasta que funcione …

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

A veces hay files de origen que faltan en tu objective.

  1. examina qué símbolos faltan
  2. objective-> fases de compilation-> comstackr fuente
  3. agregue los files fuente faltantes si no están en la list
  4. command + b para la dicha

Puede seleccionar los files que parecen "faltantes" y verifique en la barra de services de la derecha que sus casillas de verificación están seleccionadas para el Objetivo que está creando.

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

1) Seleccione el proyecto en la window de navigation del proyecto que mostrará el resumen del proyecto a la derecha

2) Seleccione las fases de construcción de la cuarta pestaña

3) Seleccionar enlace binary con opción de biblioteca

4) Agregue marco para el cual está recibiendo

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

6) Constrúyalo nuevamente y los errores desaparecen.

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

Los chicos de arriba tenían razón en que lo primero que debe comprobar es si ha omitido agregar frameworks, vea los pasos proporcionados por Pruthvid arriba.

Mi problema, resultó ser que faltaba una class de compilation después de haberla eliminado, y más tarde la volví a agregar.

Verifique sus "Fuentes de compilation" como se muestra para las classs de error informadas. Agregue las classs perdidas que creó.

Xcode 4.3.1 compilar fuentes

El problema es que falta la membresía de destino para el file agregado al objective de la aplicación. Seleccione el file y agregue 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 introduzca la descripción de la imagen aquí

Asegúrese de que el marco faltante esté en la list en "Fases de destino / compilation / Enlace binary con bibliotecas", si no simplemente agréguelo. Como se mencionó anteriormente, generalmente indica un marco faltante.

En mi proyecto había dos frameworks idénticos en la list, cuando eliminé uno de ellos, tuve este error, porque también lo eliminó de la list "Binario de enlaces con bibliotecas". Volví a agregar y el problema desapareció (y todavía tengo dos frameworks en la list)

Solucioné un error similar en mi proyecto al cambiar la configuration de compilation> Arquitecturas para TODOS mis objectives.

El problema: cuando actualicé de Xcode 4.4 a Xcode 4.5, mi proyecto todavía compiló bien en el simulador pero no se compiló en los dispositivos. En los dispositivos arrojó el error "símbolo (s) no encontrado para la architecture armv7s", junto con el error "Apple Mach-O Linker Error" y "clang: error: el command linker falló con el código de salida 1 (use -v para ver la invocación ) ".

La causa (en mi caso): Mi proyecto tenía múltiples objectives, y aunque la configuration de compilation> Arquitecturas para el objective principal se configuró para include la architecture de armv7s, el objective principal dependía de otro objective (enumerado en Fases de compilation> Dependencias) y No pensé en restablecer la configuration de compilation> Arquitecturas para ese otro objective, y tuve que cambiar eso para include armv7s. Supongo que el simulador y el dispositivo se ejecutan en diferentes architectures, y es por eso que el simulador estaba bien mientras el dispositivo no estaba.

¿Su proyecto depende de otro proyecto, y es que 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 objective dependiente no esté configurado 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 es llamado por el código C ++. Tuve un problema con mi propia function de file .c que aparece como "símbolo no encontrado" cuando se llama desde Obj-C. La solución era cambiar el tipo de file: en Xcode 4, use el panel de información extendida para establecer el tipo de file en "Objective-C ++ Source"; en Xcode 3, use "Obtener información" para cambiar el tipo de file a "source.cpp.objcpp".

En mi caso, ninguna de las soluciones publicadas funcionó. Tuve que eliminar el proyecto y hacer una nueva compra del server SVN . Por suerte, el proyecto fue alojado en un sistema de control de versiones. No sé qué haría de otra manera.

En un proyecto C ++ que utiliza una class definida templatizada , mientras recibo el mismo error, seleccioné el file .cpp con la class templatized definida en Project Navigator, luego Eliminar> Eliminar reference. Además, el file .h asociado, mientras se hace reference en el proyecto, necesita tener una instrucción #include en el file .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 de repente, significa que el proyecto le falta algunos frameworks. Las bibliotecas y los proyectos dependientes pueden requerir frameworks, por lo que si ha agregado uno recientemente, puede causar este error.

Para agregar frameworks, haga clic derecho en el nombre del proyecto en la vista del proyecto, select Agregar, luego select Marcos existentes en la list. Luego encuentra el marco con los símbolos que te faltan.

La otra cosa es si agrega alguna class en los resources comstackdos y quita las classs del proyecto y luego aparece el error. Lo mejor que puedes hacer es eliminar las classs de los resources de compilation (Configuración de compilation -> fonts de compilation) que se han eliminado del proyecto.

En mi caso, agregué las classs admob en el proyecto y compilé el proyecto. En un caso posterior, no quiero include admobs en mi proyecto, así que eliminé las references de las classs admob de mi proyecto. Cuando se produjo este error, eliminé la class .m de mi admob de los resources de compilation y resolví este problema.

Esto me pasó mientras intentaba copyr en 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 registraba el post en el método de error … solo aparecía en el binary ( obviamente no tengo acceso al código fuente b / c tengo que pagar por ello).

Sin embargo, me di count de esto en la página de instrucciones:

introduzca la descripción de la imagen aquí

Así que fui a las tripas de ese file de configuration 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 me di count de que las banderas anteriores donde copyn textualmente las otras banderas del linker en mi configuration de compilation … sin embargo, en mi proyecto … ¡no lo fueron! … Simplemente copié y pegué en la configuration de construcción de mi proyecto otras banderas vinculadoras y todo funcionó.

punto de alejamiento: si confía en algún file .xcconfig en su configuration, compruebe dos veces con una fuente de código de ejemplo o algo 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 UPGRADE 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ía ambos SDK. Para resolverlo, simplemente borre la antigua ruta SDK.

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

Esta vez me he dejado perplejo solo para darme count de que agregué una @interface de solo datos y olvidé agregar el bloque de implementación @ vacío.