web-dev-qa-db-fra.com

Erreur: "Le fichier a été créé pour l'archive qui n'est pas l'architecture liée (armv7s)"

J'ai construit ma propre bibliothèque statique C++, qui est construite avec les paramètres:

  • Architectures: armv7, armv7s
  • Construire des architectures actives uniquement: Non
  • Plateformes de support: iOS
  • Architectures valides: armv7, armv7s

Le projet de bibliothèque se construit bien et j'ai obtenu le fichier .a (j'ai nettoyé le dossier de construction et reconstruit le projet pour être sûr que mes paramètres étaient efficaces).

J'ai ajouté la bibliothèque (fichier .a) à mon projet iOS, mais le projet ne se construira pas même si j'ai défini les mêmes paramètres exacts sur le projet iOS:

  • Architectures: armv7s, armv7
  • Construire des architectures actives uniquement: Oui
  • Plateformes de support: iOS
  • Architectures valides: armv7, armv7s

Je reçois toujours cette erreur:

ld: avertissement: ignorer le fichier /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib .a, le fichier a été construit pour l'archive qui n'est pas l'architecture liée (armv7s): /Users/hidden/Library/Developer/Xcode/DerivedData/HelloWorldCppLib-fomvvtklwijvqicyhahxleiscein/Build/Products/Debug-iphoneos/libHelloWorldCppLib.a

Qu'est-ce que je rate? Il me dit que le fichier .a n'a pas été construit pour armv7s, mais c'est exactement les paramètres avec lesquels j'ai construit la bibliothèque.

42
Thomas Clemensen

Lorsque vous créez une bibliothèque, vous devez la compiler à la fois pour le simulateur et l'appareil, puis fusionner les deux sorties (fichiers .a) en 1 bibliothèque, puis la lier à votre projet iOS.

33
graver

J'ai moi-même rencontré un problème similaire. La solution de @graver Est définitivement valide.

Le problème était que la bibliothèque était en cours de construction pour armv7 Au lieu de armv7s. Vous pouvez le vérifier vous-même en utilisant lipo <path/to/lib.a> -info.

La définition de l'option Build Active Architectures Only Sur No résout le problème.

J'espère que cela t'aides.

36
Buzzy

une note supplémentaire est:

    Build Active Architectures Only  set to no

est pour le projet lib.

23
lbsweek

J'ai exactement la même erreur avec les cocoapods: pour moi, la solution était d'avoir deux différentes architectures de construction active pour la cible et les pods.

Cible de l'application:

Build Active Architectures Only  **Yes**

pods Target

Build Active Architectures Only  **No**
7
Kevin ABRIOUX

malheureusement, tous ces conseils ne fonctionnent pas pour moi - Xcode 7.3.1 (7D1014), iPhone 5. mais dès que j'ai supprimé tous les fichiers temporaires Xcode (+ redémarrez Xcode) et reconstruit à nouveau, cela est devenu fonctionnel.

2
Alexey Ishkov

Cela m'est arrivé avec le SDK Facebook (v 4.24.0) utilisé via CocoaPods.

Le nettoyage ou la définition de Build Active Architectures Only Sur NO sur les pods n'a pas résolu le problème.

La solution était de vider le répertoire de construction (voir Paramètres de construction/Emplacements de construction/CONFIGURATION_BUILD_DIR) OR $(CONFIGURATION_BUILD_DIR) Variable Xcode.

1
Nicolas Buquet

J'utilise XCode 5.1.1 et suis tombé sur le problème décrit. Un moyen plus pratique de résoudre ce problème semble être simplement de créer une archive (via le menu Build/Archive) et de la distribuer. Le fichier lib distribué contiendra toutes les architectures définies.

0
boto