319 votes

Pour architecture armv7 httpd Undefined symbols

Ce problème a été me rend fou, et je ne peux pas savoir comment résoudre le problème...

    Undefined symbols for architecture armv7:
  "_deflateEnd", referenced from:
      -[ASIDataCompressor closeStream] in ASIDataCompressor.o
  "_OBJC_CLASS_$_ASIDataDecompressor", referenced from:
      objc-class-ref in ASIHTTPRequest.o
  "_deflate", referenced from:
      -[ASIDataCompressor compressBytes:length:error:shouldFinish:] in ASIDataCompressor.o
  "_deflateInit2_", referenced from:
      -[ASIDataCompressor setupStream] in ASIDataCompressor.o
ld: symbol(s) not found for architecture armv7
collect2: ld returned 1 exit status
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/gcc-4.2 failed with exit code 1

Je pense que cela a à faire avec:

ld: symbol(s) not found for architecture armv7

mais j'ai ajouté: libz.1.2.3.dylib et ce n'est pas aider, quelqu'un a des idées?

512voto

Joe Points 37343

Causes Communes

Les causes les plus fréquentes pour les "symboles non définis pour l'architecture armv7" sont:

  1. Vous importez un en-tête et de ne pas le lier avec la bibliothèque correcte. Ce qui est commun, surtout pour les en-têtes pour les bibliothèques comme QuartzCore puisqu'il n'est pas inclus dans les projets par défaut. Pour résoudre:

    • Ajouter les bibliothèques correctes dans l' Link Binary With Libraries de la section de l' Build Phases.

    • Si vous souhaitez ajouter une bibliothèque à l'extérieur du chemin de recherche par défaut, vous pouvez inclure le chemin d'accès dans l' Library Search Paths de la valeur dans les Paramètres de construction et d'ajouter
      -l{library_name_without_lib_and_suffix} (eg. pour libz.une utilisation -lz) à l' Other Linker Flags de la section de l' Build Settings.

  2. Vous copiez des fichiers à votre projet, mais vous avez oublié de vérifier la cible pour ajouter les fichiers à. Pour résoudre:

    • Ouvrez l' Build Phases de la cible, développez Compile Sources et ajouter le manque .m fichiers. Si c'est votre problème, veuillez upvote Cortex réponse ci-dessous .

  3. Vous inclure une bibliothèque statique qui est construit pour une autre architecture comme i386, le simulateur sur votre machine hôte. Pour résoudre:

    • Si vous avez plusieurs fichiers de la bibliothèque de vos bibliothèques fournisseurs à inclure dans le projet, vous devez inclure l'un pour le simulateur (i386) et celui de l'appareil (armv7 par exemple).

    • En option, vous pouvez créer une graisse bibliothèque statique qui contient à la fois des architectures.



Réponse Originale À Cette Question:

Vous n'avez pas lié à l'encontre de la bonne libz fichier. Si vous cliquez droit sur le fichier et l'afficher dans le finder son chemin d'accès doit être quelque part dans un sdk iOS dossier. Voici la mienne par exemple

/Développeur/plates-formes/iPhoneOS.plate-forme/Developer/SDKs/iPhoneOS4.3.sdk/usr/lib

Je recommande de supprimer la référence, et puis re-rajouter dans le Lien Binaire Avec la section des Bibliothèques Phases de construction de votre cible.

197voto

Cortex Points 1501

J'ai eu un problème similaire, la nuit dernière, et le problème était lié au fait que j'avais glissé une classe à partir du Finder de mon projet dans Xcode.

La solution était d'aller à l'Phases de construction de l'onglet, puis le Compiler les Sources et assurez-vous que vous faites glisser la classe à la liste.

38voto

Alex Zavatone Points 901

J'ai eu un problème similaire et j'ai dû cocher la case "Construire Active Seulement l'Architecture" sur chacune des configurations de Projet (Debug, Release et Déploiement) et dans les Paramètres de construction de la Cible.

21voto

user2166865 Points 111

Une autre cause possible de "undefined symbol" de l'éditeur de liens erreurs tente d'appeler une fonction C à partir de un .mm de fichier. Dans ce cas, vous aurez besoin d'utiliser extern "C" {...} lorsque vous importez les fichiers d'en-tête.

L'éditeur de liens d'erreur de l'appel de C-Fonction d'Objective-C++

14voto

syoleen Points 187

J'ai eu un problème similaire avec qui. Le nom de la classe après _OBJC_CLASS_$_ est en fait de ma classe. La raison en était que je n'avais pas cocher la case "Ajouter à la Cible" quand je fais glisser les fichiers de code source dans la liste de navigation.

Ma solution a été:

  1. supprimer la classe à partir de la liste de navigation et choisissez "supprimer la référence seulement"

  2. faites glisser les fichiers de code source à nouveau et assurez-vous que la case à cocher "ajouter à la Cible" est cochée. La case à cocher est juste sous "Copie si nécessaire" et "Créer un groupe".

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X