Errore del linker Xcode: file troppo piccolo per l'architettura x86_64


89

Sto sviluppando un'applicazione in Xcode.

Quando provo a compilare, viene visualizzato questo errore:

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)

Qualcuno sa cosa c'è che non va?


60
Prova una ricostruzione / pulizia completa. È possibile che la build precedente sia stata interrotta in modo anomalo, lasciando il TWRAppDelegate.ofile danneggiato o di dimensioni zero.
Martin Baulig

5
Una piccola precisazione: lo fai con cmd + shift + k, se non funziona, vai nella cartella dei dati derivati ​​ed elimina la cartella denominata come tuo progetto.
Ramy Al Zuhouri

3
@RamyAlZuhouri: non è più necessario andare nel cestino delle cartelle di build da soli. Tieni premuto Opzione e il comando Pulisci (che si trova nel menu Prodotto) cambia in "Pulisci cartella build ...", che lo fa per te.
Peter Hosey

Il suggerimento di Martin Baulig ha risolto il mio problema. Grazie!
tbodt

2
@PeterK. Mi sta guadagnando il distintivo d'argento Nice Question :-)
tbodt

Risposte:


193

Rubare la risposta di @ martin-baulig:

Prova una ricostruzione / pulizia completa. È possibile che la build precedente sia stata interrotta in modo anomalo, lasciando il file TWRAppDelegate.o danneggiato o di dimensioni zero.


7
Finalmente! Te lo meriti.
tbodt

Grazie! :-) Beh, la risposta di @ martin-bailig nei commenti mi ha aiutato, ma sarebbe meglio averla qui come una vera risposta.
Peter K.

3
Il mio progetto richiede un po 'di tempo per essere realizzato. Puoi cavartela eliminando solo i file oggetto 1-4 che vengono danneggiati se interrompi la compilazione in modo anomalo piuttosto che tutto.
Fernando Mazzon

22

Di solito aggiungo uno spazio (potrebbe essere qualsiasi carattere per quella materia) al file in questione, lo rimuovo e poi salvo. Più facile e veloce di una build pulita.


3
La tua risposta mi fa risparmiare 10 minuti di ricostruzione del progetto! Grazie
Accid Bright

Questa risposta dovrebbe andare in cima!
Ting Yi Shih

8

Per risolvere automaticamente questo problema Build Script Phasepuò essere aggiunto. Goto Xcode -> Your Project -> Your Target -> Build Fhases -> + -> New Run Script Phase

Rinominalo in Xcode Link Fixe spostalo sopra la Compile Sourcesfase. Incolla questo nel corpo dello 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

Questo script verifica la presenza di file oggetto con dimensione zero e li rimuove in modo che quando la compilazione viene completata nel passaggio successivo, ha esito positivo.

Devi aggiungere questo script per ogni destinazione dell'app se ne hai molti.

Questo script impiega circa 0,1 secondi per essere eseguito e ti salva dalla ricostruzione completa del progetto.


È geniale! Bisogno di avere in ogni progetto.
Nik Kov

7

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


5

basta rimuovere questo file eseguendo cmd nella tua app terminale:

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


1
L'ho risolto allo stesso modo, molto più velocemente di una pulizia completa / build sul mio grande progetto. La prossima volta che proverò la soluzione di @Anton Plebanovich, potrebbe essere un modo eccellente per automatizzare questa correzione.
Romano

2

Modo rapido per correggere l'errore senza pulire completamente la cache:

  1. Apri file descritto per errore (in caso di questa domanda TWRAppDelegate)
  2. cmd + A
  3. cmd + X
  4. Ricostruisci - fallisci
  5. cmd + V
  6. Ricostruire - avere successo

1

Poiché la creazione di un progetto pulito potrebbe richiedere troppo tempo, esiste un modo più breve per coloro che hanno accesso al file danneggiato nella cache:

  • Elimina il file (Rimuovi riferimento)
  • Costruisci progetto
  • Reinserisci il file
  • Costruisci progetto

Versione completa in modo da non avere problemi a trovare il file:

  • Trova il file nel navigatore del progetto Xcode
  • Fare clic con il pulsante destro del mouse sul file e premere "mostra nel Finder" (apre un Finder nella posizione in cui si trova il file)
  • Seleziona il file in Xcode e premi backspace, quindi fai clic su "Rimuovi riferimento"
  • Crea progetto (fallirà ma aspetta che finisca)
  • Reinserisci il file trascinandolo dal Finder nella stessa posizione in cui lo hai appena eliminato
  • Crea progetto (dovrebbe funzionare ora)

1

Puoi semplicemente eliminare il file TWRAppDelegate.o e continuare la creazione. Copia il percorso completo indicato nel messaggio di errore e incollalo dietro un comando "rm" nel tuo terminale. Non è necessario pulire / ricostruire, eliminare i dati derivati, aggiungere / rimuovere il file dal progetto, ecc.


-1

Passaggio 1. Vai a: Progetto> Impostazioni build> Percorsi di ricerca

Passaggio 2. Impostare "Cerca sempre percorsi utente" su Sì

Passaggio 3. Crea il progetto (riceverai un avviso ma il progetto verrà compilato).

Passaggio 4. Impostare "Cerca sempre percorsi utente" su No e creare di nuovo per eliminare l'avviso


Posso solo aggiungere questo per gli altri che trovano questa risposta. "Cerca sempre il percorso utente" è stato deprecato a partire da Xcode 8.3 e dalla documentazione dice anche "Disabilitarlo è fortemente consigliato". (Cioè impostandolo su NO)
Groot

-1

Una ricostruzione pulita non ha funzionato nel mio caso, quindi spiego come ho risolto il problema:
- Rimosso il riferimento al file (non eliminare il file)
- Aggiungi di nuovo il file al progetto ed esegui


Un voto negativo richiede una spiegazione, ha funzionato per me e potrebbe funzionare per chiunque altro
David Santiago
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.