it-swarm.com.de

Xcode-Linker-Fehler: Datei zu klein für Architektur x86_64

Ich entwickle eine Anwendung in Xcode.

Wenn ich versuche zu bauen, wird dieser Fehler angezeigt:

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)

Weiß jemand was falsch ist?

65
tbodt

Stehlen von @ martin-bauligs Antwort:

Versuchen Sie es mit einem vollständigen Umbau/Reinigen. Möglicherweise wurde der vorherige Build abnormal abgebrochen, wodurch die Datei TWRAppDelegate.o beschädigt wurde oder die Größe null hat.

135
Peter K.

Normalerweise füge ich der betreffenden Datei ein Leerzeichen hinzu (könnte ein beliebiges Zeichen sein), entferne es und speichere dann .

9
grassyburrito

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

3
yeyimilk

entfernen Sie einfach diese Datei durch Ausführen von cmd in Ihrer Terminal-App:

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

2
haithngn

Sie können einfach die Datei TWRAppDelegate.o löschen und den Build fortsetzen. Kopieren Sie den in der Fehlermeldung genannten vollständigen Pfad und fügen Sie ihn hinter dem Befehl 'rm' in Ihr Terminal ein. Sie müssen nicht bereinigen/neu erstellen, abgeleitete Daten löschen, die Datei zum Projekt hinzufügen oder daraus entfernen usw.

1
Jason Pepas

Um dieses Problem automatisch zu beheben, kann Build Script Phase hinzugefügt werden. Gehen Sie zu Xcode -> Ihr Projekt -> Ihr Ziel -> Phasen erstellen -> + -> Neue Skriptphase

Benennen Sie es in Xcode Link Fix um und verschieben Sie es über die Compile Sources-Phase. Fügen Sie dies in den Skriptkörper ein:

# 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

Dieses Skript prüft, ob Objektdateien mit der Größe Null vorhanden sind, und entfernt sie, sodass beim nächsten Schritt der Kompilierungsvorgang erfolgreich durchgeführt werden kann.

Sie müssen dieses Skript für jedes App-Ziel hinzufügen, wenn Sie viele haben.

Die Ausführung dieses Skripts dauert ~ 0,1 Sekunden und erspart Ihnen den vollständigen Neuaufbau des Projekts.

1

Da das Erstellen eines sauberen Projekts viel zu lange dauern kann, gibt es für diejenigen, die Zugriff auf die im Cache beschädigte Datei haben, einen kürzeren Weg:

  • Löschen Sie die Datei (Referenz entfernen)
  • Projekt erstellen
  • Datei erneut einfügen
  • Projekt erstellen

Vollversion, damit Sie die Datei problemlos finden können:

  • Suchen Sie die Datei im Xcode-Projektnavigator
  • Klicken Sie mit der rechten Maustaste auf die Datei und drücken Sie "In Finder anzeigen" (öffnet einen Finder an dem Ort, an dem sich die Datei befindet).
  • Wählen Sie die Datei in Xcode und drücken Sie die Rücktaste, und klicken Sie auf "Referenz entfernen".
  • Projekt erstellen (es wird fehlschlagen, aber warten, bis es abgeschlossen ist)
  • Fügen Sie die Datei erneut ein, indem Sie sie aus dem Finder an den Ort ziehen, an dem Sie sie gerade gelöscht haben
  • Projekt erstellen (sollte jetzt funktionieren)
1
Matic Oblak

Schnelle Fehlerbehebung ohne vollständige Cache-Bereinigung:

  1. Fehlerhaft beschriebene Datei öffnen (bei dieser Frage TWRAppDelegate)
  2. cmd + A
  3. cmd + X
  4. Neu erstellen - fehlschlagen
  5. cmd + V
  6. Neu erstellen - erfolgreich
0
Vadim Akhmerov

Ein sauberer Umbau war nicht in meinem Fall, daher erkläre ich, wie ich das Problem gelöst habe:
- Verweis auf die Datei wurde entfernt (Datei nicht löschen)
- Fügen Sie die Datei erneut dem Projekt hinzu und führen Sie sie aus

0
David Santiago

Schritt 1. Gehen Sie zu: Projekt> Build-Einstellungen> Suchpfade

Schritt 2. Legen Sie für "Benutzerpfade immer suchen" die Option "Ja" fest

Schritt 3. Erstellen Sie das Projekt (Sie erhalten eine Warnung, das Projekt wird jedoch erstellt.)

Schritt 4. Setzen Sie "Always Search User Paths" (Benutzerpfade immer suchen) auf "Nein" und erstellen Sie erneut, um die Warnung zu löschen

0
tland