web-dev-qa-db-fra.com

manquante requise architecture x86_64 dans le fichier libCorePlot-CocoaTouch.a

Selon le tutoriel de Ray Wenderlich , j’ai fait ce qui suit:

Step 1 - J'ai téléchargé CorePlot_1.4.Zip sur le site officiel

Step 2 - J'ai ajouté à mon projet le dossier CorePlotHeaders et la bibliothèque static nommé libCorePlot-CocoaTouch.a (en vérifiant «Copier les éléments dans le groupe de destination»). dossier (si nécessaire) ”)

Step 3 -J'ai ajouté à Other Linker Flags field comme suit: -ObjC

Step 4 - J'ai vérifié dans Link Binary avec les bibliothèques si libCorePlot-CocoaTouch.a et QuartzCore étaient ici

Résultat: Lorsque je compile mon projet, tout fonctionne correctement lorsque j'utilise Iphone Retina (4-Inch). Mais lorsque j'utilise Iphone Retina (4 pouces 64 bits), le message suivant s'affiche lorsque j'essaie de créer et d'exécuter:

ld: warning: ignoring file /blah/blah/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /blah/blah/libCorePlot-CocoaTouch.a (3 slices)

Voici le message complet:

ld: warning: ignoring file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a, missing required architecture x86_64 in file /Users/me/Desktop/project/libCorePlot-CocoaTouch.a (3 slices)
Undefined symbols for architecture x86_64:
"_CPTDecimalFromCGFloat", referenced from:
  -[PatientConstanteVisualiser configurePlots] in PatientConstanteVisualiser.o
  -[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_CPTDecimalFromInteger", referenced from:
  -[PatientConstanteVisualiser configureAxes] in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTAxisLabel", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTColor", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTFill", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableLineStyle", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTMutableTextStyle", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTPlotSymbol", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTScatterPlot", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTTheme", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_OBJC_CLASS_$_CPTXYGraph", referenced from:
  objc-class-ref in PatientConstanteVisualiser.o
"_kCPTStocksTheme", referenced from:
  -[PatientConstanteVisualiser configureGraph] in PatientConstanteVisualiser.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

J'ai passé plusieurs heures sur cette question ... S'il vous plaît, aidez ...

19
Erzékiel

Si vous souhaitez une version 64 bits de Core Plot, vous devez créer une nouvelle version de la bibliothèque statique. Les versions Arm64 requièrent iOS 7, mais Core Plot prenant également en charge les versions antérieures, la bibliothèque pré-construite est uniquement en 32 bits.

Ouvrez CorePlot-CocoaTouch.xcodeproj et modifiez les paramètres d'architecture en "Architectures standard (y compris 64 bits)". Générez la cible "Universal Library" et incluez la bibliothèque statique résultante à la place de celle incluse dans Core Plot 1.4 ou utilisez plutôt la configuration de projet dépendante.

19
Eric Skroch

CorePlot a publié la version 1.5.1 pour fonctionner avec Xcode 5.1. Il vous suffit de copier le dossier CorePlotHeaders et le fichier libCorePlot-CocoaTouch.a dans votre projet.

Vous pouvez le télécharger depuis ici .

14
Ojancano

Essayer:

lipo -info libCorePlot-CocoaTouch.a

Cela montre que la bibliothèque est conçue pour armv7, armv7s et i386 (simulateur 32 bits), sans compter le simulateur 64 bits. Vous devrez construire la bibliothèque pour le simulateur 64 bits, puis utiliser lipo pour ajouter la bibliothèque 64 bits à libCorePlot-CocoaTouch.a.

Sortie:

Architectures in the fat file: libCorePlot-CocoaTouch.a are: armv7 armv7s i386

PS: Cela ne fonctionnera pas non plus sur l'iPhone 5S (pas d'arm64).

MODIFIER:

Voici les étapes à suivre pour produire un binaire contenant à la fois les architectures arm64 et x86_64:

  1. téléchargez CorePlot_1.4 à partir de https://code.google.com/p/core-plot/downloads/detail?name=CorePlot_1.4.Zip&can=2&q=
  2. Ouvrez le projet Xcode (CorePlot-CocoaTouch.xcodeproj) situé dans CorePlot_1.4/Source/framework.
  3. Sélectionnez "Architectures standard" pour "architectures" et "Dernière iOS (iOS 7)" pour "Base SDK".
  4. Construire la bibliothèque (CMD + B)
  5. Allez à CorePlot_1.4/Source/build/dans le terminal
  6. Exécutez lipo -create ./Debug-iphoneos/libCorePlot-CocoaTouch.a ./Debug-iphonesimulator/libCorePlot-CocoaTouch.a -output core_plot_all.a
  7. Ajoutez la bibliothèque nouvellement créée (core_plot_all.a) à votre projet.
  8. Vous êtes prêt à partir
13
Ivan Genchev

changer le réglage de l'architecture de Xcode

enter image description here

6
codercat

Si vous ne voulez pas suivre le processus de téléchargement et de construction du projet, j'ai construit la bibliothèque universelle (pour armv7, armv7s et arm64) et l'affiche ici .

Ceci est construit à partir de l'identifiant de validation de coreplot cc0a18cef8915f4a11e0699e9429c0a2f0018b42.

5
James Whong

J'ai eu les mêmes erreurs avec Xcode7.3 + CocoaPod. Et j'ai corrigé le problème avec Other Linker Flags = $ (hérité).

Bien entendu, ce paramètre est uniquement valide avec CocoaPod.

0
kmugitani

Si vous avez tout essayé mais que cela ne fonctionne toujours pas, essayez de définir -ObjC -lCorePlot-CocoaTouch sur 'Autres drapeaux de l'éditeur de liens' dans 'Paramètres de construction' ou votre cible de projet.

0
firebear

J'ai suivi le document officiel ' Utilisation de Core Plot dans une application ' dans Xcode 7.2.1 avec iOS SDK 9.2. J'ai eu la même erreur même si le .a supportait arm64, jusqu'à ce que j'ajoute l'indicateur d'éditeur de liens '-lCorePlot-CocoaTouch' en plus de '-OjbC'.

0
firebear

La solution la plus simple qui fonctionne pour moi: Allez dans votre projet> paramètre de construction> architecture. Changez d'architecture en tant qu'armv7 et supprimez d'autres comme armv6, etc., comme indiqué dans l'image ci-dessous: -

 Change required

0
shubham mishra