web-dev-qa-db-fra.com

Erreur de l'éditeur de liens Xcode: fichier trop petit pour l'architecture x86_64

Je développe une application sous Xcode.

Lorsque j'essaie de construire, cette erreur survient:

ld: in /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o, file too small for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Quelqu'un sait-il ce qui ne va pas?

65
tbodt

Voler la réponse de @ martin-baulig:

Essayez une reconstruction complète/propre. Il est possible que la version précédente ait été anormalement abandonnée, ce qui a endommagé ou endommagé le fichier TWRAppDelegate.o.

135
Peter K.

J'ajoute généralement un espace (il peut s'agir de n'importe quel caractère) au fichier en question, le supprime, puis enregistre ... plus simple et plus rapide qu'une construction nette.

9
grassyburrito

rm -rf /Users/hostname/Library/Developer/Xcode/DerivedData

3
yeyimilk

il suffit de supprimer ce fichier en exécutant cmd dans votre application de terminal:

rm /Users/theodore/Library/Developer/Xcode/DerivedData/Tower-bkpdifuqssebjdgurzmtirbxejnn/Build/Intermediates/Tower.build/Debug/Tower.build/Objects-normal/x86_64/TWRAppDelegate.o

2
haithngn

Vous pouvez simplement supprimer le fichier TWRAppDelegate.o et continuer votre construction. Copiez le chemin complet mentionné dans le message d'erreur et collez-le derrière une commande 'rm' dans votre terminal. Il n'est pas nécessaire de nettoyer/reconstruire, supprimer les données dérivées, ajouter/supprimer le fichier du projet, etc.

1
Jason Pepas

Pour résoudre automatiquement ce problème, Build Script Phase peut être ajouté. Allez à Xcode -> Votre projet -> Votre cible -> Phases de construction -> + -> Nouvelle phase de script d'exécution

Renommez-le en Xcode Link Fix et déplacez-le au-dessus de la phase Compile Sources. Collez ceci dans le corps du script:

# Legacy build system
dirname "$LD_DEPENDENCY_INFO_FILE" | xargs -I {} find {} -size 0 | while read -d $'\n' file; do
    rm "$file"
done

# New build system
find "$OBJECT_FILE_DIR_normal" -size 0 | while read -d $'\n' file; do
    rm "$file"
done

Ce script vérifie la présence de fichiers objets de taille nulle et les supprime. Ainsi, lorsque la compilation est effectuée à l'étape suivante, elle aboutit.

Vous devez ajouter ce script pour chaque cible d'application si vous en avez plusieurs.

Ce script prend environ 0,1 seconde à s'exécuter et vous évite une reconstruction complète du projet.

1
Anton Plebanovich

Comme la construction d'un projet propre peut prendre beaucoup trop de temps, il existe un moyen plus rapide pour ceux qui ont accès au fichier corrompu dans le cache:

  • Supprimer le fichier (Supprimer la référence)
  • Projet de construction
  • Réinsérer le fichier
  • Projet de construction

Version complète pour que vous n'ayez aucun mal à trouver le fichier:

  • Recherchez le fichier dans le navigateur de projet Xcode.
  • Faites un clic droit sur le fichier et appuyez sur "Afficher dans le Finder" (ouvre un Finder à l'emplacement où se trouve le fichier)
  • Sélectionnez le fichier dans Xcode et appuyez sur la touche Retour arrière, puis cliquez sur "Supprimer la référence".
  • Construire le projet (il échouera mais attendra qu'il se termine)
  • Réinsérez le fichier en le faisant glisser du Finder au même endroit où vous l'avez supprimé.
  • Construire le projet (devrait fonctionner maintenant)
1
Matic Oblak

Moyen rapide de corriger une erreur sans nettoyer le cache complet:

  1. Ouvrir le fichier décrit dans l'erreur (dans le cas de cette question TWRAppDelegate)
  2. cmd + A
  3. cmd + X
  4. Reconstruire - échouer
  5. cmd + v
  6. Reconstruire - réussir
0
Vadim Akhmerov

Une reconstruction propre n’a pas eu lieu dans mon cas, alors j’explique comment j'ai résolu le problème:
- Suppression de la référence au fichier (ne pas supprimer le fichier)
- Ajoutez le fichier au projet à nouveau et exécutez

0
David Santiago

Étape 1. Allez à: Projet> Paramètres de construction> Chemins de recherche

Étape 2. Définissez "Toujours rechercher les chemins d'utilisateur" sur Oui

Étape 3. Construisez le projet (vous recevrez un avertissement mais le projet se construira.)

Étape 4. Définissez "Toujours rechercher les chemins utilisateur" sur Non et reconstruisez à nouveau pour éliminer l'avertissement.

0
tland