80 votes

le fichier a été construit pour les archives, qui n'est pas l'architecture d'être lié (i386)

J'ai appris à construire bibliothèque statique. Je veux l'utiliser dans mon application pour iPhone et ipad. Lorsque j'essaie d'exécuter le simulateur-je obtenir reliant errrors. Je suis nouveau sur le développement d'iOS. aide gentiment;

ld: avertissement: le non-respect de fichier /Utilisateurs/valuelabs/Desktop/DruvaProject/bibliothèques/libnetUtils.un fichier, a été construit pour les archives, qui n'est pas l'architecture étant lié (i386) les symboles non définis pour l'architecture i386:
"_OBJC_CLASS_$_netUtils", référencé à partir de: objc-de catégorie-réf dans le ViewController.o ld: symbole(s) ne se trouvent pas pour l'architecture i386 clang: erreur: échec de la commande de l'éditeur de liens avec le code de sortie 1 (l'option-v pour voir invocation)

J'ai essayé d'ajouter dans les Architectures i386. mais pas de chance

77voto

Cody A. Ray Points 1516

Après avoir lutté avec ce même problème et en suivant toutes les réponses acceptées de mise à jour des paramètres de construction, de compensation de l'éditeur de liens chemin de recherche, etc.. j'ai enfin trouvé la réponse qui a fonctionné pour moi.

Avant de construire, assurez-vous que vous sélectionnez le type de droit (Simulateur d'iPhone) au lieu de l'Appareil iOS. Puis reconstruire. Sinon, vous essayez d'utiliser une bibliothèque construite pour un appareil iOS (processeur arm) sur un simulateur sur votre mac (i386). Si j'ai été évident, mais ne l'était pas.

Avant:

iOS Device Settings

Après:

iPhone 5.1 Simulator Settings

Maintenant, regardez dans le groupe des Produits dans le Navigateur > clic droit de votre bibliothèque statique (.un fichier) > Afficher dans le Finder, vous remarquerez que ses dans un Debug-iphonesimulator dossier au lieu de Debug-iphoneos. Je n'ai pas fait attention pour le nom du dossier d'origine, ou je pourrais avoir pensé à cela plus tôt.

Espérons que cette aide.

28voto

achow Points 380

Votre libnetUtils.a est en cours de construction pour une architecture différente de celle de votre cible.

De vérifier la libnetUtils paramètres de construction. Les architectures qu'il est construit pour, et la liste de ses architectures prises en charge doit être une (faible) - ensemble de la cible de l'architecture. La complexité est ici que l'architecture qui en résulte est répartie sur différents paramètres: "Architectures", "Construire active seulement l'architecture" et "Valide" Architectures.

"Construire active seulement l'architecture" paramètres de rendre ce particulièrement déroutant. Par exemple, supposons que vous construisez pour le simulateur. Si le "Construire active seulement l'architecture" réglage de Debug est définie sur NON, ça sera la construction de toutes les architectures répertoriées dans "Architectures" et "Valide" architectures (probablement armv7, etc). Mais si libnetUtils a que défini à Oui (Debug: Oui) c'est seulement la construction pour l'architecture i386. Ainsi, lorsque votre linker essaie de lier armv7 avec i386, il échoue.

26voto

Kiran Points 176

Si j'arrive à ignorer fichier avertissement - j'irait lipo -info sur ignorés fichier de trouver que c'est de l'architecture comme ci-dessous

lipo -info libnetUtils.a

Ce serait imprimer soit d'un i386, armv6, armv7, armv7s, x86_64, etc. En général, que l'architecture est en adéquation avec votre objectif de créer une plate-forme. E. g.

  • i386 = simulateur ios ou 32 bits sur mac os x
  • armv6 armv7 arm7s = appareil ios
  • x86_64 = 64 bits sur mac os x

En fonction de la différence, soit vous devez reconstruire votre bibliothèque pour votre plate-forme cible ou le changement de votre plate-forme cible.

Remarque: Pour les gros fichiers binaires, lipo -info va imprimer une combinaison de ci-dessus architectures.

9voto

Alexander Bekert Points 118

Je ne sais pas si mon avis est correct, mais essayez de vérifier ceci:

  • Sélectionnez votre projet
  • Sélectionnez "Paramètres De Construction"
  • Vérifier Architectures:
    • Valide les architectures doivent être "armv6 armv7"
    • Plateformes prises en charge doit être "iphonesimulator iphoneos" (peut-être l'iPad, je ne sais pas)
    • Base SDK – votre SDK iOS (j'ai la version 5.0 d'iOS).

Ne me juge pas si je suis le capitaine évident :)

5voto

CodaFi Points 29073

Cela signifie que la bibliothèque que vous essayez d'utiliser n'a pas été universellement compilé pour le simulateur iOS (i386 symboles sont pour le Mac). Cours d'exécution sur un périphérique réel devrait parfaitement fonctionner.

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