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

88

Je développe une application en Xcode.

Lorsque j'essaye de construire, cette erreur se produit:

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?

tbodt
la source
59
Essayez une reconstruction / nettoyage complet. Il est possible qu'une version précédente ait été anormalement abandonnée, laissant le TWRAppDelegate.ofichier corrompu ou de taille nulle.
Martin Baulig
5
Une petite précision: vous faites cela avec cmd + shift + k, si cela ne fonctionne pas, allez dans le dossier de données dérivées et supprimez le dossier nommé comme votre projet.
Ramy Al Zuhouri
3
@RamyAlZuhouri: Il n'est plus nécessaire de jeter vous-même les dossiers de construction dans la corbeille. Maintenez la touche Option enfoncée et la commande Nettoyer (qui se trouve dans le menu Produit) se transforme en «Nettoyer le dossier de construction…», qui le fait pour vous.
Peter Hosey
La suggestion de Martin Baulig a résolu mon problème. Merci!
tbodt
2
@PeterK. Cela me
vaut le

Réponses:

186

Voler la réponse de @ martin-baulig:

Essayez une reconstruction / nettoyage complet. Il est possible que la version précédente ait été anormalement abandonnée, laissant le fichier TWRAppDelegate.o corrompu ou de taille nulle.

Peter K.
la source
7
Finalement! Vous le méritez.
tbodt
Merci! :-) Eh bien, la réponse de @ martin-bailig dans les commentaires m'a aidé, mais ce serait mieux de l'avoir ici comme une vraie réponse.
Peter K.
2
Mon projet prend du temps à se construire. Vous pouvez vous en sortir en ne supprimant que les fichiers objets 1-4 qui sont corrompus si vous arrêtez anormalement la construction plutôt que tout.
Fernando Mazzon
20

J'ajoute généralement un espace (qui peut être n'importe quel caractère d'ailleurs) au fichier en question, je le supprime puis je l'enregistre. Plus facile et plus rapide qu'une construction propre.

herbivore
la source
2
Votre réponse me fait gagner 10 minutes de reconstruction du projet! Merci
Accid Bright
8

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

Renommez-le Xcode Link Fixet déplacez-le au-dessus de la Compile Sourcesphase. Collez ceci dans le corps du script:

# Legacy build system
legacy_dir=`dirname "${LD_DEPENDENCY_INFO_FILE}"`
if [ -d "${legacy_dir}" ]; then
    find "${legacy_dir}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

# New build system
if [ -d "${OBJECT_FILE_DIR_normal}" ]; then
    find "${OBJECT_FILE_DIR_normal}" -size 0 | while read -d $'\n' file; do
        rm "$file"
    done
fi

Ce script vérifie les fichiers objets de taille nulle et les supprime donc lorsque la compilation est effectuée à l'étape suivante, il réussit.

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

Ce script prend environ 0,1 seconde pour s'exécuter et vous évite de reconstruire complètement le projet.

Anton Plebanovich
la source
C'est génial! Besoin d'avoir dans chaque projet.
Nik Kov
7

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

yeyimilk
la source
5

supprimez simplement 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

haithngn
la source
1
Je l'ai résolu de la même manière, beaucoup plus rapidement qu'un nettoyage / build complet de mon gros projet. La prochaine fois que j'essaierai la solution de @Anton Plebanovich, cela pourrait être un excellent moyen d'automatiser ce correctif.
Romano le
2

Moyen rapide de corriger l'erreur sans nettoyage complet du cache:

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

Étant donné que la création d'un projet propre peut prendre beaucoup trop de temps, il existe un moyen plus court 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 problème à trouver le fichier:

  • Trouvez le fichier dans le navigateur de projet Xcode
  • Cliquez avec le bouton 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 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 vers le même emplacement que vous venez de le supprimer
  • Projet de construction (devrait fonctionner maintenant)
Matic Oblak
la source
1

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.

Jason Pepas
la source
-1

Étape 1. Accédez à: Projet> Paramètres de construction> Chemins de recherche

Étape 2. Définissez «Toujours rechercher les chemins utilisateur» sur Oui

Étape 3. Générez le projet (vous recevrez un avertissement mais le projet sera généré.)

Étape 4. Redéfinissez «Toujours rechercher les chemins utilisateur» sur Non et reconstruisez pour éliminer l'avertissement

tland
la source
Peut simplement ajouter ceci pour les autres qui trouvent cette réponse. "Always Search User Path" est obsolète depuis Xcode 8.3 et de la documentation, il est également dit "Désactiver il est fortement recommandé." (C'est-à-dire en le réglant sur NON)
Groot
-1

Une reconstruction propre n'a pas dans mon cas donc j'explique comment j'ai résolu le problème:
- Suppression de la référence au fichier (ne pas supprimer le fichier)
- Ajouter à nouveau le fichier au projet et exécuter

David Santiago
la source
Un vote négatif nécessite une explication, cela a fonctionné pour moi et cela pourrait fonctionner pour n'importe qui d'autre
David Santiago