last - update ios 8.0 iphone 4




le fichier a été construit pour l'archive qui n'est pas l'architecture étant liée(i386) (6)

Je dois construire une bibliothèque statique. Je veux utiliser dans mon application iPhone et iPad. Quand j'essaie de faire fonctionner le simulateur, j'ai des erreurs de liaison. Je suis nouveau sur le développement iOS. aide aimablement;

ld: warning: en ignorant le fichier /Users/valuelabs/Desktop/DruvaProject/libraries/libnetUtils.a, le fichier a été construit pour l'archive, ce qui n'est pas l'architecture liée (i386). Symboles indéfinis pour l'architecture i386:
"_OBJC_CLASS _ $ _ netUtils", référencé par: objc-class-ref dans ViewController.o ld: symbole (s) introuvable pour l'architecture i386 clang: erreur: la commande du linker a échoué avec le code de sortie 1 (utilisez -v pour voir l'invocation)

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


Après avoir lutté avec ce même problème et en suivant toutes les réponses acceptées de mettre à jour les paramètres de construction, effacer le chemin de recherche de l'éditeur de liens, etc. J'ai finalement découvert une réponse qui a fonctionné pour moi.

Avant de construire, assurez-vous de sélectionner le bon type (iPhone Simulator) au lieu de iOS Device. Puis reconstruisez. Sinon, vous essayez d'utiliser une bibliothèque construite pour un appareil iOS (processeur d'armement) sur un simulateur sur votre Mac (i386). Ça aurait dû être évident, mais ça ne l'était pas.

Avant:

Après:

Maintenant, regardez dans le groupe Produits dans le navigateur> faites un clic droit sur votre bibliothèque statique (fichier .a)> Afficher dans le Finder, vous remarquerez que c'est dans un dossier Debug-iphonesimulator au lieu de Debug-iphoneos. Je n'ai pas fait attention au nom du dossier à l'origine, ou j'aurais pu y penser plus tôt.

J'espère que cela t'aides.


Avait le même problème, et essayé diverses solutions de la page en vain. J'avais toujours un message me disant que ma bibliothèque n'était pas construite pour arm64.

Enfin comment je l'ai résolu:

  • a ouvert le project.pbxproj pour la bibliothèque dans un éditeur de texte
  • recherché pour VALID_ARCHS
  • il y avait 4 occurrences, dont 2 ne contenait pas arm64
  • J'ai ajouté manuellement arm64 dans la chaîne (VALID_ARCHS = "arm64 i386 armv7 armv7s")
  • reconstruire la lib et tout allait bien

Semble parfois que les paramètres de construction affichés par XCode sont incomplets et ne correspondent pas précisément au fichier de projet.


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


J'avais aussi une architecture d'armv7s. Je l'ai supprimé et j'ai vérifié que les armv6 et armv7 étaient les deux seuls listés. Ça fonctionne maintenant


Parfois, ces types d'erreurs vous irrite!

Suppression des données dérivées Works pour moi:

Étapes à corriger

1) Dans XCODE> Windows> Projet> Sélectionnez votre projet> Supprimer les données dérivées> Quitter XCODE et le rouvrir> Si vous obtenez MAC-O-Linker échoué erreur échoué> Reférez this lien> Nettoyer et construire à nouveau.


Si je reçois l'avertissement ignorer le fichier - je lancerais lipo -info sur le fichier ignoré pour trouver son architecture comme ci-dessous

lipo -info libnetUtils.a

Cela imprimerait soit i386, armv6, armv7, armv7s, x86_64 etc. En général, cette architecture doit correspondre à votre plate-forme de construction cible. Par exemple

  • i386 = simulateur ios ou 32 bits sur mac os x
  • armv6 armv7 arm7s = périphérique ios
  • x86_64 = 64 bit construire sur mac os x

Selon l'incompatibilité, vous devez soit reconstruire votre bibliothèque pour votre plate-forme cible, soit modifier votre plate-forme cible.

Note: Pour les binaires de graisse, lipo -info imprimera une combinaison des architectures ci-dessus.





ipad