Errore Apple Mach-O Linker durante la compilazione per il dispositivo


238

Ho appena effettuato l'aggiornamento a xcode 4.0 e non riesco più a distribuire su iPhone, ricevo un errore Apple Mach-O Linker, ma funziona comunque per il simulatore.

    Ld /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel normal armv7
    cd /Users/yveswheeler/iParcel
    setenv IPHONEOS_DEPLOYMENT_TARGET 3.2
    setenv PATH "/Developer/Platforms/iPhoneOS.platform/Developer/usr/bin:/Developer/usr/bin:/usr/bin:/bin:/usr/sbin:/sbin"
    /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 -arch armv7 -isysroot /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS4.3.sdk -L/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -F/Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos -filelist /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel.LinkFileList -dead_strip -all_load -ObjC -lxml2 -miphoneos-version-min=3.2 -framework UIKit -framework CoreGraphics -framework QuartzCore /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a -framework AddressBook -lz.1.2.3 -framework Foundation -framework CFNetwork -framework MobileCoreServices -framework SystemConfiguration -framework MessageUI -framework AudioToolbox -o /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Intermediates/iParcel.build/Debug-iphoneos/iParcel.build/Objects-normal/armv7/iParcel

arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Core.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Network.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20Style.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UI.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UICommon.a: No such file or directory
arm-apple-darwin10-g++-4.2.1: /Users/yveswheeler/Library/Developer/Xcode/DerivedData/iParcel-fkeqjcjcbbhjwhdssjptkdxzzzxh/Build/Products/Debug-iphoneos/libThree20UINavigator.a: No such file or directory
Command /Developer/Platforms/iPhoneOS.platform/Developer/usr/bin/g++-4.2 failed with exit code 1

38
Che diamine?! Tanti problemi diversi per lo stesso messaggio di errore. Ottimo lavoro Apple!
Iulian Onofrei,

18
"ERRORE: si è verificato un errore" sarebbe più utile :))
Aviram Netanel,

Guarda gli avvisi che il Linker emette prima dell'errore; può portare a una soluzione migliore / più specifica.
Pro Q

Risposte:


216

Ecco una soluzione permanente. Il progetto di sovrascrittura generale può causare questo prolema. Prova questo metodo.

-UPDATE - Errore Clang - Errore Mach-O Linker

In alcuni casi, la finestra del registro degli errori visualizza l'errore .xctest, per risolverlo

-> Seleziona il tuo progetto

-> Accanto a questo (appena prima della scheda Generale) seleziona il tuo file projectTest dal menu a discesa

-> C'è un'opzione (come ProjNameTests)

-> Nell'applicazione host, seleziona il tuo progetto dal menu a discesa solo se mostra personalizzato

FATTO!

inserisci qui la descrizione dell'immagine

Vecchio metodo eliminato


4
Se rimuovo il percorso di ricerca di Framework che sto ottenendo non riesco a trovare il file di intestazione
Danpe

62
Penso di non capirlo. Cosa dovrei fare…?
fabian,

1
@fabian Basta saltare e provare una soluzione alternativa :-)
Gajendra K Chauhan

4
Mi hai salvato la giornata, amico. Seduto di fronte al mio capo, devo mostrargli l'app su cui sto lavorando e ho riscontrato questo errore del linker. Me ne sarei andato se non sono atterrato qui: D
Saraz,

2
dove si trova l'applicazione host nel passaggio finale?
Kartiikeya,

195

Ho avuto lo stesso problema e il problema era che ho accidentalmente importato un file .m invece di .h in un file di implementazione - spero che sia d'aiuto


1
Impossibile trovare l'errore! Basta provare ogni soluzione
AsifHabib il

Questo non è vero, ho provato la stessa cosa in un nuovo progetto e ho ancora riscontrato lo stesso errore.
Hemang,

Vai alla sezione Impostazioni progetto e fasi di costruzione, assicurati di non avere un file .m nella sezione "Copia risorse bundle" invece di "Compila fonti". che ha funzionato per me
LuAndre,

Impossibile trovare la soluzione. Non so cosa farò ...
Markus,

Mi hai salvato la vita. Grazie mille!
Isaac,

73

Ho appena riscontrato lo stesso problema.

La soluzione (per me) = controlla i tuoi framework.

Nel mio caso avevo aggiunto classi relative a CoreData senza "CoreData.framework". L'aggiunta ha risolto il reclamo di MACH_O.


6
Succede anche quando si collega di nuovo una libreria che non è presente nell'ultima versione dell'SDK. Diciamo che hai collegato contro libz.1.2.3 e che sdk include 1.2.5. Controlla i tuoi framework è davvero un buon suggerimento! Grazie Dante!
SlowTree

Grazie SlowTree, il suggerimento di salvataggio ha risolto la mia esperienza con questo crash del linker. libz.1.2.3 a libz.1.2.5;
Tom Pace

2
I cocoapodi mi hanno collegato due libPods.afile (da cui i simboli duplicati). Grazie Dante!
Nick Merrill,

Sì. File .a rimossi e aggiunti di nuovo dal linker. Ha funzionato!
Balasubramanian,

61

aprire il file .xcworkspace non .xcodeproj. Ripeto il file .xcworkspace aperto. Tutti i tuoi errori spariranno.


1
Wow, questo deve essere uno dei messaggi di debug più folli. Non avrei mai immaginato che questo fosse il motivo basato sul messaggio fornito.
Joseph Casey,

1
Ha fatto il trucco per me perché c'era una libreria esterna che non era inclusa in .xcodeproj. aveva a che fare con i cocoapodi
Sjoerd de Wit il

Questo ha funzionato per me. Come ha detto @SjoerddeWit, l'inclusione dei cocoapod richiede l'apertura di .xcworkspace anziché .xcodeproj.
Cody Richmond,

Mi hai salvato la giornata! +1
Bruno Monteiro,

Ho esportato un progetto di unità in xcode e non esiste alcun file .xcworkspace
Ayush Malviya,

36

Ri: Problema come indicato nel titolo:

Nel caso in cui qualcun altro avesse perso l'ovvio ...

Ho riscontrato questo errore dopo aver installato una nuova versione di Xcode4 e trascinato i file esistenti in un nuovo progetto. Non ero riuscito a individuare che la casella di controllo "Aggiungi alle destinazioni" non fosse selezionata nella finestra di dialogo "Scegli le opzioni per l'aggiunta di file:". Correggere la mia omissione in Target> Crea fasi> Compila fonti ha risolto il problema.


Questo trucco ha funzionato per me. Grazie. Ho cancellato tutte le directory di compilazione e ricostruito il progetto.
Vivek Gyaneshwar,

34

Menu> Prodotto> Pulisci, questo è ciò che l'ha fatto funzionare. Non sono sicuro di tutti gli altri. Ho aggiunto una foto da mostrare.

inserisci qui la descrizione dell'immagine


1
Eccezionale. Di gran lunga la soluzione più semplice che ho trovato.
Vincent van Leeuwen,

29

Errore bizzarro. Per me, ho appena pulito e riavviato Xcode e il problema è scomparso.



24

Nessuna di queste risposte mi ha aiutato. Quindi ho provato a reinstallare Cocoapods:

pod deintegrate

pod install

Problema risolto!


Non sono sicuro di dove sia la disconnessione con pods e xcode, ma spesso è difficile assicurarsi che i file pods arrivino alla cartella derivataData. Questo sembra risolvere quel problema. Vorrei poter iniziare proprio questa risposta ..
Jacksonkr,

20

Il problema era che in XCode 4, le dipendenze non assumono le impostazioni dell'architettura del progetto principale, come in precedenza in XCode 3. Ho dovuto passare attraverso tutte le mie dipendenze impostandole per l'architettura corretta.


2
grazie! Sono stato completamente indotto in errore dal fatto che il messaggio di errore del linker si lamenta di "File non trovato", non di "File trovato, ma non riesco a usarlo ...", e vagavo tra le impostazioni di xcode alla ricerca della libreria percorsi. Ma questo ha funzionato per me. E se hai questo problema, anche questo altro post è correlato: stackoverflow.com/questions/2999844/three20-and-ios-4 . Inoltre, questo bel blog di sintesi: amirnaor.com/?p=112
Rob,

13

Ho avuto lo stesso e sono riuscito a risolverlo.

Nelle preferenze di xcode , la scheda posizione cambia il valore in posizione di costruzione in " Place build products in locations specified by targets".


Grazie Wolfert, ci hai provato, ma hai ancora 1250 avvisi Apple Mach-O Linker e nessun progresso. Hai fatto qualcos'altro per risolvere questo problema? Saluti

Grazie Wolfert! mi hai risparmiato un sacco di tempo.
Sunil Targe,

6
L'opzione non è disponibile in XCode 5.1
Hemang

13

Ho lottato con questo per un po 'di tempo, e nel mio caso ha finito per essere l'impostazione di costruzione in Percorsi di ricerca denominata FRAMEWORK_SEARCH_PATHS. Mi ha aiutato a selezionare il pulsante "Livelli", che sembrava confrontare le mie impostazioni di progetto, destinazione e "Risolto". Ho visto che la mia impostazione di destinazione in qualche modo ha superato il valore predefinito di "$ (ereditato)" e il valore sovrascritto era ciò che XCode "risolveva" l'impostazione. Quando ho rimosso l'override, che in questo caso ha specificato 3.2 sdk, gli errori del linker sono scomparsi, così come alcuni avvisi recentemente apparsi su tutte le classi in cui ho chiamato i metodi post-4.0.

Informazioni su tali avvisi: non li avevo mai visti prima di aver aggiunto il framework MessageUI per una recente modifica. Ho il sospetto, ma non so per certo, che quando ho aggiunto quel framework, XCode ha cercato di fare qualcosa di intelligente aggiungendo quell'override al mio target. Non l'ho fatto esplicitamente in nessun punto. Gli avvisi riguardavano, ad esempio, il metodo URLByAppendingPathComponent di NSURL, che non appariva fino a SDK 4.0. Prima di aggiungere il framework MessageUI, non ho mai ricevuto questo avviso. E da quando ho rimosso l'override, non li ottengo più.


11

Ho avuto questo problema e l'importazione l'ha QuartzCorerisolto.


8

Cambiare "Costruisci solo architetture attive" su Sì in CordovaLib.xcodeproj -> Impostazioni di costruzione ha fatto il trucco per me. in precedenza l'app era in esecuzione sul simulatore, ma non sul dispositivo.


7

Potrebbe essere necessario aggiornare le impostazioni di compilazione.

Verifica la versione di destinazione iOS e le architetture del processore, poiché potresti non avere i vecchi SDK con XCode 4.

È possibile che venga visualizzato «SDK mancante» nelle impostazioni di generazione. Cambialo in qualunque cosa sia applicabile.


È praticamente la prima cosa che faccio ogni volta che aggiorno xcode. Questa volta non è il problema.
CodeVomit

7

Ho avuto lo stesso problema: ho appena eliminato un file .m, mentre .h era nel progetto. Il problema è scomparso quando ho ripristinato il file .m.


6

Verificare che non sia stato specificato un percorso di ricerca del framework specifico. se vai alle informazioni sulla destinazione e rimuovi semplicemente le voci del percorso di ricerca del framework, dovrebbe utilizzare le impostazioni predefinite per la versione di distribuzione specificata.


5

Ho solo provato a creare un category classfile e ho ottenuto questo strano problema ... e infine ....

Modo errato per creare una classe di categoria che causa il problema:

New File-> Cocoa Touch-> Objective-C class, quindi ho modificato il nome di file per Categoria Classe come nome .. (vale a dire OriginalClass_CategoryName.h/ma OriginalClass+CategoryName.h/m, e anche modificato il contenuto del file).

Proprio qui:

New File-> Cocoa Touch-> Objective-C categorye genererà automaticamente i file ( OriginalClass+CategoryName.h/m).

Oh, quanto sono stupido !!


5

Se si utilizza CoreData e si utilizza XCode per generare sottoclassi NSManagedObject per le entità, assicurarsi di generarne solo una per ogni entità.

Il mio problema era che generava più sottoclassi NSManagedObject per la stessa entità (e le metteva in cartelle diverse).

Li ho appena cancellati e ho rigenerato le sottoclassi di NSManagedObject.


5

Per aggiungere all'elenco di cose strane che hanno risolto questo problema ...

Ho avuto alcune variabili const CGFloat in un file di intestazione globale in questo modo

const NSInteger  globalInteger1 = 2;
const NSInteger  globalInteger2 = 3;

Nel momento in cui ho rimosso questi, tutto andava bene :)


1
Il mio problema WEIRD era nel file .pch o constants.h che ho dichiarato una costante come NSString * const kInitiaNotification = @ "kInitialNotification"; senza menzionare inizialmente lo "statico"
Mazen Kasser,

Ho avuto il problema subito dopo il passaggio da NSString static *key = @"someKey"aconst NSString *key = @"someKey"
TonyTony,

5

Ho avuto esattamente lo stesso problema solo perché avevo due stesse costanti in classi diverse. Puoi anche avere questo problema se importi file .m non .h


Mi salvi la giornata !!
teck wei,

@teckwei puoi premere la freccia suVoto: D
Adela Toderici,


4

Ho avuto lo stesso problema e l'ho risolto. Nel mio caso, l'impostazione "architetture" ha causato il problema. Nel mio file di progetto, scheda Impostazioni build, le architetture erano impostate su armv6. L'ho cambiato in Standard (armv7), pulisci e costruisci. Quindi ha funzionato!


4

Nel mio caso il problema era avere architetture diverse specificate sotto obiettivi diversi. Stavo costruendo il mio target di applicazione con armv6, armv7 e cocos2d con Standard (amrv7). Entra nelle impostazioni di costruzione e assicurati che le tue architetture siano d'accordo per tutti gli obiettivi.


4

Ho risolto questo problema troppo strano!

Vai su Target > Crea fasi > Collega binario con librerie :

Rimuovi tutti i tuoi quadri e aggiungili di nuovo!

Spero che funzioni per te!


soluzione piuttosto terribile
SleepsOnNewspapers

Non si può rispondere ... non molto logico
LKM,

Ho controllato il messaggio di errore e ho scoperto che era uno dei framework, quindi ho rimosso quel framework e l'ho aggiunto di nuovo, non tutti i framework ma solo quello.
Oluwatobi Omotayo,

4

Per la lingua Swift ...

Ricevo questo errore "ld: file troppo piccolo (lunghezza = 0) ...."

Nel mio caso ho semplicemente pulito il progetto e poi ricostruito ..

Passi: -

1) vai a Project -> Clean

2) goto Project -> Build

Spero che questo ti aiuti..


Ha funzionato per me. È successo quando ho cambiato il dispositivo da iPhone 6 a iPhone 4S.
racl101,

Ha funzionato anche per me. Grazie mille
Lee

4

Questo ha fatto un trucco per me:

Vai a

1) Prodotti> pulito

2) Windows> Progetti

3) Seleziona il tuo progetto e fai clic su " Elimina " Dati derivati

4) Prodotti> Build


3

Una possibilità: attiva "Eliminazione codice morto" nelle impostazioni di build di Xcode 4.

Un'altra possibilità: potrebbe essere che sei passato all'utilizzo di LLVM per un framework che in precedenza utilizzava GCC. Tornare a GCC (o LLVM GCC) può eliminare questi avvisi.


3

Ho erroneamente definito una nuova costante con lo stesso nome di una costante esistente in un file diverso e questo ha causato questo errore per me utilizzando xCode 4.3.1. xCode non si è lamentato ma al compilatore non piace.


3

Sono stato in grado di correggere questo errore modificando "Percorsi di ricerca nella libreria"

In primo luogo è stato ritagliato perché avevo spostato un paio di cartelle in giro, e alla fine ho dato alle mie impostazioni di costruzione due diversi percorsi di ricerca perché vengono automaticamente aggiunti alle impostazioni di creazione quando colleghi una libreria / framework, ma non lo sono sempre rimosso.

Quindi, se sposti una libreria / framework collegata in una directory diversa e ricollegala, dovrai modificare manualmente il percorso di ricerca.

Potresti essere in grado di schivare questo rimuovendo la libreria / framework prima di spostarlo, ma non l'ho provato.

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.