web-dev-qa-db-fra.com

symbole (s) non trouvé (s) pour l'architecture i386

En essayant de compiler avec Xcode, j'obtiens l'erreur suivante:

  **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**

Pas sûr de ce que ça signifie.

110
Doz

Vous utilisez ASIHTTPRequest, vous devez donc configurer votre projet. Lire la deuxième partie ici

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

49
epatel

Si ce genre de chose apparaît soudainement, cela signifie généralement que le projet manque de certains cadres dont il a besoin. Les bibliothèques et les projets dépendants peuvent nécessiter des cadres. Par conséquent, si vous en avez ajouté un récemment, cela peut entraîner cette erreur.

Pour ajouter des structures, cliquez avec le bouton droit sur le nom du projet dans la vue du projet, sélectionnez Add, puis sélectionnez Existing frameworks... dans la liste. Trouvez ensuite le cadre avec les symboles qui vous manquent.

En ce qui concerne la manière dont vous avez trouvé les frameworks dont vous avez besoin, j’ai trouvé le moyen le plus simple d’utiliser Google, bien que vous puissiez probablement utiliser la recherche d’aide Xcode également. Recherchez l'un des symboles et faites de votre mieux pour trouver le nom non associé (par exemple, SCNetworkReachabilityGetFlags), puis le premier lien de documentation que vous trouverez sur developer.Apple.com est souvent le bon. Vous n'avez généralement pas à chasser très loin. Dans ce cas, c'est cette page:

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

Ensuite, en haut de la page, il vous indique quel framework utiliser, SystemConfiguration dans ce cas. Ajoutez donc cela au projet et compilez à nouveau.

Continuez ensuite jusqu'à ce que cela fonctionne ...

Edit: je n’ai jamais utilisé le simulateur, mais c’est ce que vous faites sur l’appareil - je suppose que c’est la même chose ...

91
please delete me

Il y a parfois des fichiers source qui manquent de votre cible.

  1. examiner quels symboles sont manquants
  2. cible-> phases de construction-> source de compilation
  3. ajouter les fichiers sources manquants s'ils ne sont pas listés
  4. commande + b pour le bonheur

Vous pouvez sélectionner les fichiers qui semblent être "manquants" et vérifier dans la barre d'outils de droite que leurs cases à cocher sont sélectionnées pour la cible que vous construisez.

63
Nir Pengas

Je l'ai résolu en utilisant la méthode suivante (pour XCode 4):

1) Sélectionnez le projet dans la fenêtre de navigation du projet qui affichera le résumé du projet à droite.

2) Sélectionnez les phases de construction du 4ème onglet

3) Sélectionnez l’option Link binary with library

4) Ajouter le cadre pour lequel vous obtenez

5) Déplacez la structure du dossier principal vers le dossier des cadres

6) le reconstruire et les erreurs ont disparu.

31
Pruthvid

Le problème est que l'appartenance à la cible du fichier ajouté est manquante pour la cible de l'application .Pour sélectionner le fichier et ajouter la coche à la case de l'appartenance à la cible

Par exemple, si l'erreur indiquée dans une définition de méthode dans common.menter image description here

16
Lithu T.V

Pensé pour ajouter ma solution pour cela, après avoir passé quelques heures sur la même erreur :(

Les gars ci-dessus avaient raison de dire que la première chose à vérifier est de savoir si vous avez oublié d'ajouter des frameworks. Reportez-vous aux étapes fournies par Pruthvid ci-dessus.

Il s'est avéré que mon problème résidait dans le manque d'une classe de compilation après l'avoir supprimée, puis rajoutée ultérieurement.

Vérifiez vos "sources de compilation" comme indiqué pour les classes d'erreur signalées. Ajoutez toutes les classes manquantes que vous avez créées.

16
justinkoh

Assurez-vous que l’infrastructure manquante figure bien dans la liste sous "Cibles/phases de construction/lier binaire avec bibliothèques" sinon ajoutez-le simplement. Comme mentionné précédemment, cela indique généralement un cadre manquant.

Dans mon projet, deux frameworks identiques étaient répertoriés. Lorsque j'ai supprimé l'un d'eux, cette erreur s'est produite, car il l'a également supprimé de la liste "Link Binary With Libraries". J'ai rajouté et le problème a disparu (et j'ai encore deux cadres répertoriés)

7
Tibidabo

J'ai corrigé une erreur similaire sur mon projet en modifiant le Paramètres de construction> Architectures pour ALL de mes cibles.

Le problème: Lors de la mise à niveau de Xcode 4.4 vers Xcode 4.5, mon projet était toujours bien compilé sur le simulateur mais ne l'était pas sur les périphériques. Sur les périphériques, l'erreur "symbole (s) non trouvé pour l'architecture armv7s," ainsi que les erreurs trompeuses "Apple Mach-O Linker Error" et "clang: error: la commande de l'éditeur de liens a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation). "

La cause (dans mon cas): Mon projet avait plusieurs cibles et même si les paramètres de construction> Architectures pour la cible principale était configuré pour inclure l'architecture armv7s, la cible principale dépendait d'une autre cible (répertoriée dans les phases de construction> Dépendances), et je n'avais pas pensé à réinitialiser les Paramètres de construction> Architectures pour cette autre cible, et je devais modifier cela pour inclure armv7s. Je suppose que le simulateur et le périphérique fonctionnent sur différentes architectures, et c’est pourquoi le simulateur était OK alors que le périphérique ne l’était pas.

5
Josh

Votre projet dépend-il d'un autre projet? S'agit-il d'une cible dans ce projet configurée pour être une dépendance directe de votre cible principale? Si tel est le cas et que la dépendance n'est pas configurée, la cible dépendante peut ne pas être générée pour toutes les configurations (c'est-à-dire le simulateur).

Juste une conjecture sauvage.

4
James J

Dans mon cas, aucune des solutions affichées n'a fonctionné. Je devais supprimer le projet et effectuer une nouvelle commande à partir du serveur SVN. Heureusement, le projet était hébergé dans un système de contrôle de version. Je ne sais pas ce que je ferais autrement.

3
otaviokz

Une autre situation pouvant causer ce problème est si votre code appelle en C++ ou est appelé par du code C++. J'ai eu un problème avec la fonction utilitaire de mon propre fichier .c qui apparaissait comme "symbole introuvable" lorsqu'elle était appelée depuis Obj-C. Le correctif consistait à changer le type de fichier: sous Xcode 4, utilisez le volet d'informations étendues pour définir le type de fichier sur "Source Objective-C++"; dans Xcode 3, utilisez "Lire les informations" pour changer le type de fichier en "source.cpp.objcpp".

3
invalidname

Cela m’est arrivé lors de la copie de la bibliothèque de démonstration PSPDFKIT dans mon projet. J'ai suivi toutes les instructions sur le site + toutes les suggestions sur cette page .. pour une raison quelconque, il a continué à donner l'erreur ci-dessus, le problème était que si je bloquais le message dans la méthode error .. il n'apparaissait que dans le binaire ( évidemment, je n'ai pas accès au code source b/c je dois payer pour cela).

J'ai remarqué ceci dans la page d'instructions:

enter image description here

Je suis donc allé au fond de ce fichier de configuration et j'ai trouvé ceci:

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

Ensuite, je suis allé à l'exemple de projet fourni par l'auteur de ladite bibliothèque .. et j'ai remarqué que les drapeaux précédents étaient copiés textuellement dans les autres drapeaux de l'éditeur de liens dans mes paramètres de construction .. mais dans mon projet .. ils ne l'étaient pas! ... Je les ai simplement copiés et collés dans les paramètres de construction de mon projet, d'autres indicateurs d'éditeur de liens et tout a fonctionné!

point de retrait: si vous utilisez un fichier .xcconfig dans votre configuration, revérifiez avec un exemple de code source ou quelque chose de ce genre et assurez-vous qu'il a bien été appliqué. Il n'a pas été appliqué correctement dans mon cas.

1
abbood

Dans un projet C++ utilisant une classe définie templatisée , tout en recevant la même erreur, j'ai sélectionné le fichier .cpp avec la classe définie templatisée dans le Navigateur de projet, puis Supprimer> Supprimer la référence. De plus, le fichier .h associé, bien que toujours référencé dans le projet, doit avoir une instruction #include dans le fichier .cpp, comme suit:

#ifndef __CircularBuffer__CircularBufferT__
#define __CircularBuffer__CircularBufferT__

... snip ...

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

Si vous voulez voir, un exemple de projet simple est sur github :

Ceci est un peu de ruse d’indirection et je ne me souviens pas de la source originale de cette solution de contournement.

1
vmanjz

Si cette erreur apparaît soudainement, cela signifie que certains cadres sont manquants dans le projet. Les bibliothèques et les projets dépendants peuvent nécessiter des cadres. Par conséquent, si vous en avez ajouté un récemment, cela peut entraîner cette erreur.

Pour ajouter des structures, cliquez avec le bouton droit sur le nom du projet dans la vue du projet, sélectionnez Ajouter, puis sélectionnez Structures existantes dans la liste. Trouvez ensuite le cadre avec les symboles qui vous manquent.

L'autre chose est que si vous ajoutez des classes dans les ressources compilées et supprimez ces classes du projet, l'erreur apparaît. La meilleure chose à faire est de supprimer les classes des ressources de compilation (Paramètres de construction -> sources de compilation) supprimées du projet.

Dans mon cas, j'ai ajouté les classes d'admob dans le projet et compilé le projet. Dans un cas ultérieur, je ne veux pas inclure admobs dans mon projet, donc j'ai supprimé les références des classes d'admob de mon projet. Lorsque cette erreur s'est produite, j'ai supprimé la classe .m de mon admob de ressources de compilation a résolu ce problème.

1

J'avais utilisé un CLGeocoder sans ajouter de cadre Core.Location. Fondamentalement, cette erreur peut signifier plusieurs choses. J'espère que ça aidera quelqu'un d'autre.

0
logixologist

Je suis resté perplexe devant celui-ci, mais je me suis rendu compte que j'avais ajouté une @interface contenant uniquement des données et oublié d'ajouter le bloc @implementation vide.

0
Steve Tranby

Une autre raison pour laquelle cela pourrait se produire est lorsque vous mettez à niveau un SDK.

Si vous supprimez simplement le groupe, puis faites glisser le nouveau dossier à projeter, le "chemin de recherche de la bibliothèque" comportera les deux SDK. Pour résoudre ce problème, supprimez simplement l'ancien chemin du SDK.

0
samwize