web-dev-qa-db-fra.com

Xcode 9 symboles non définis pour l'architecture x86_64

après avoir basculé sur Xcode 9, des erreurs se sont produites, cela ressemble à ceci.

 enter image description here

J'ai masqué les noms de projet et de classes, mais il existe une liste de classes se terminant par le suffixe .o. Dans Xcode 8.3.2, tout fonctionne. J'ai 2 projets, l'un est la bibliothèque qui construit sans problèmes. Un autre projet est l’application de test, qui pointe vers la bibliothèque par la directive: path dans Podfile. Dans les deux paramètres de construction des projets -> les architectures sont définies sur les architectures standard, les architectures actives uniquement sont définies sur DEBUG: Oui, RELEASE: Non. Avez-vous rencontré ce problème? Merci d'avance pour l'aide.

8
Jozef Vrana

Quand j'ai exécuté la construction pour le profilage, cela fonctionnait, mais avec la construction classique, il y avait des erreurs mentionnées. Après une recherche dans les journaux, il semble y avoir un comportement étrange avec les indicateurs, en particulier -fprofile-instr-generate. La solution consistait à définir l'option Activer la couverture de code sur Non dans les paramètres de construction du projet de bibliothèque. Cela tirait dans le noir mais cela fonctionnait d'une manière ou d'une autre.

0
Jozef Vrana

Couru dans un problème similaire. Affichez-le ici au cas où cela pourrait aider n'importe qui.

Utilisait la classe AbcService depuis un framework (écrit par Swift 3 et par nous-mêmes) dans la classe Objective-c B de notre application. Après la mise à niveau de Xcode8/Swift3 vers Xcode9/Swift4, il n'a pas réussi à créer d'archive pour la versionconfig, en raison d'une erreur Undefined symbols de cette classe lors de la liaison:

Undefined symbols for architecture arm64:
   "_OBJC_CLASS_$__TtC15XxxabcServices17AbcService", referenced from:

Ce qui est étrange, c’est que cela a bien fonctionné d’archiver le fichier debug config et d’exécuter en mode émulateur.

Il a fallu presque un jour à la cause: la classe Swift AbcService manquait depublicmodificateur.

7
Wei WANG

Astuce simple ici: Aller -> Aller au dossier "/ Library/Developer/Xcode" supprimer les données dérivées ensuite nettoyer votre projet puis Exécuter.

4
PrasannaKumar

Puisque vous utilisez des Cocoapods, vous devrez probablement les mettre à jour.

Cela signifie que vous devez créer un pod update sur la ligne de commande dans le répertoire de votre projet, puis reconstruire votre projet dans Xcode.

En général, lorsque vous utilisez une nouvelle version majeure de Xcode, il est nécessaire de reconstruire tous les composants. Votre message d'erreur vous indique que les fichiers objet que vous avez déjà (les fichiers * .o sont essentiellement ce que le compilateur produit à partir de vos fichiers source) ne sont pas compatibles avec les fichiers objet nouvellement compilés (l'éditeur de liens qui se plaint dans votre cas a la de combiner ou de lier tous les fichiers d’objets).

Il peut parfois être nécessaire de nettoyer vos données dérivées (les trucs cachés par Xcode). Vous pouvez le faire en allant dans le menu Product de Xcode et en maintenant la touche Option/Alt enfoncée, choisissez l’élément de menu 'Nettoyer le dossier de construction'.

0
Thomas Krajacic