objective c - for - símbolo(s) no encontrados para arquitectura i386
xcode for windows (17)
¿Depende su proyecto 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 esté siendo construido para todas las configuraciones (es decir, el simulador)
Solo una conjetura salvaje.
Cuando intento compilar 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.
Algunas veces hay archivos fuente que faltan en su objetivo.
- examinar qué símbolos faltan
- target-> build phases-> compile source
- agregue los archivos fuente faltantes si no están listados
- 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 objetivo que está creando.
Asegúrate de que el marco faltante esté en la lista en "Fases de destino / compilació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)
El problema es que falta la membresía objetivo 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 objetivo
Por ejemplo, si el error se muestra en una definición de método en common.m
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.
Está utilizando ASIHTTPRequest, por lo que necesita configurar su proyecto. Lea la segunda parte aquí
Esta vez me quedé perplejo al descubrir que agregué una interfaz de solo datos y olvidé agregar el bloque @implementation vacío.
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:
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 compilació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
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.
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 compilació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.
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.
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".
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 compilación después de que la borré, y luego la agregué nuevamente.
Verifique sus "fuentes de compilación" como se muestra para las clases de error informadas. Agregue cualquier clase faltante que haya creado.
Repare un error similar en mi proyecto al cambiar las Configuraciones de compilación> Arquitecturas para TODOS mis objetivos.
El problema: cuando actualicé de Xcode 4.4 a Xcode 4.5, mi proyecto aún compilaba bien en el simulador pero no compilaba en 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 la invocación ). "
La causa (en mi caso): Mi proyecto tenía objetivos múltiples, y aunque Build Settings> Architectures para el objetivo principal estaba configurado para incluir la arquitectura de armv7s, el objetivo principal dependía de otro objetivo (enumerado en Build Fhas> Dependencies), y No había pensado en restablecer las Configuraciones de compilación> Arquitecturas 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.
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 compilar.
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 ...
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 compilados y eliminaste esas clases del proyecto, 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.