Simboli indefiniti per architettura arm64


200

Ricevo un errore Apple Mach-O Linker ogni volta che importi un file da CocoaPods.

Undefined symbols for architecture arm64:
  "_OBJC_CLASS_$_FBSession", referenced from: someFile
ld: symbol(s) not found for architecture arm64

Ne ottengo circa 12, per i vari Pod che utilizzo.

Sto cercando di costruire per l'iPhone 5S usando XCode 5.

Ho provato varie soluzioni qui su SO, ma non ne ho ancora nessuna che funzioni.

Come posso correggere questo errore Apple Mach-O Linker?


Ho appena trovato un altro avvertimento che potrebbe essere interessante, spero che questo mi porti alla soluzione:

Ignoring file ~/Library/Developer/Xcode/DerivedData/SomeApp/Build/Products/Debug-iphoneos/libPods.a, 

file was built for archive which is not the architecture being linked (arm64):~/Library/Developer/Xcode/DerivedData/someApp/Build/Products/Debug-iphoneos/libPods.a


Soluzione semplice Vai a Target -> Collegamento -> Flag di altri linker e aggiungi $ (ereditato) in flag di altri linker sia in Debug che in Release.
Mihir Oza,

Risposte:


248

Se le architetture e le architetture valide sono a posto, puoi verificare se hai aggiunto $(inherited), che aggiungerà flag di linker generati in pod, ad altri flag di linker come di seguito: inserisci qui la descrizione dell'immagine


7
@chancyWu Potresti spiegarmi?
Paul Brewczynski,

5
anche se ancora non funziona, aggiungi @ (ereditato) anche ai percorsi di ricerca nella libreria.
Enrico Susatyo,

1
Lol, Use the $(inherited) flagavviso terminale ignorato . E l'errore mi ha portato qui. mi ha salvato la giornata.
Sushil Sharma,

2
Sto lavorando con Xcode 7.2 e in altre bandiere Linker -> Debug vedo: -weak_framework CoreFoundation -weak_framework UIKit -weak_framework AVFoundation -weak_framework CoreMedia -weak-lSystem -ObjC ... qui ho aggiunto $ (ereditato) ma non funziona t lavoro
Alessandra,

Mi hai risparmiato un sacco di tempo. Grazie.
Nirmalsinh,

123

Il problema è che i cocoapodi non sono stati creati per l'architettura arm64, tuttavia non possono essere collegati quando li costruisci. Probabilmente non puoi usare quei pacchetti fino a quando non vengono aggiornati e non usano quell'architettura. Puoi correggere l'errore del linker andando su project -> target (il nome del tuo progetto) -> costruisci le impostazioni e cambia le architetture in architetture standard (armv7, armv7s) e architetture valide in armv7, armv7s.

Nota, questo significa che non otterrai la piena potenza del processore a 64 bit. Hai detto che stai costruendo per i 5, quindi potrebbe esserci qualche motivo per cui hai bisogno di questo. Se per qualche motivo hai assolutamente bisogno di quel potere (forse stai costruendo un gioco) e hai disperatamente bisogno di quei file, potresti inviare una richiesta pull e quindi ricompilare il progetto in arm64 impostando quegli stessi campi su arm64 nei file da cui hai estratto i progetti open source. Ma, a meno che tu non abbia davvero bisogno di questi file per essere compatibile a 64 bit, per ora sembra un po 'eccessivo.

EDIT: Alcune persone hanno anche riferito che l'impostazione di Build For Active Architectures su YES era anche necessaria per risolvere questo problema.

A partire dal 28-04-2014 l'impostazione dovrebbe essere simile a questa:

inserisci qui la descrizione dell'immagine


4
Ciò ha risolto l'errore, per l'esecuzione sul simulatore, tuttavia, non ha risolto l'errore per l'esecuzione sul dispositivo. Pods è stato rifiutato per libPods.a perché le sue architetture '' (per qualche motivo, non lo sta rilevando - anche se posso vederlo in Xcode) non conteneva tutte le architetture richieste 'armv7 armv7s'
GangstaGraham

7
Ok, ho capito impostando Build For Active Architectures su Sì. Grazie mille!
GangstaGraham,

2
A parte: puoi usare il filecomando in Terminale per dire quali architetture supporta una libreria statica.
funroll

8
Sono appena arrivato qui per aggiungere al ritornello: selezionare SÌ per COSTRUISCI PER L'ARCHITETTURA ATTIVA è l'opzione migliore qui.
Wells,

56
Questa non è più una soluzione. Apple ora richiede il supporto per 64 bit per tutte le distribuzioni.

52

Ho risolto questo problema impostando che:

ARCHS = armv7 armv7s

VALID_ARCHS = armv6 armv7 armv7s arm64


1
Ho avuto un problema simile quando ho usato XCode 5.1 per la prima volta, questo è stato risolto. Grazie!
GangstaGraham,

@morisunshine sei sicuro, hai controllato le architetture binarie dopo la compilazione?
onmyway133,

@ onmyway133 Ho verificato, ma ora non ho riscontrato questo problema nel nuovo XCode.
morisunshine,

@morisunshine sì, voglio dire, hai perso l'arm64
onmyway133

Non più errori di compilazione, fino a questo punto è OK. Ma durante il caricamento della build archiviata, visualizzo un errore di arm64 bit mancante poiché il supporto di arm64 bit è una compulsione dal 1 ° febbraio 2015.
zeeawan

45

Mi sono imbattuto nello stesso / simile problema di implementazione AVPictureInPictureControllere il problema era che non stavo collegando il framework AVKit nel mio progetto.

Il messaggio di errore era:

Undefined symbols for architecture armv7:
   "_OBJC_CLASS_$_AVPictureInPictureController", referenced from:
       objc-class-ref in yourTarget.a(yourObject.o)
ld: symbol(s) not found for architecture armv7
clang: error: linker command failed with exit code 1 (use -v to see invocation)

La soluzione:

  1. Vai al tuo progetto
  2. Seleziona il tuo obiettivo
  3. Quindi, vai a Build Phases
  4. Apri collegamento binario con librerie
  5. Infine, aggiungi + il framework AVKit / qualsiasi altro framework .

Spero che questo aiuti qualcun altro a riscontrare un problema simile che ho avuto.


6
Sì, vale la pena ricordare che questo è un errore che viene generato se ti manca un framework. Un indizio è che provi a rimuovere le architetture e anche quella successiva / rimanente fallisce ...
Kristen Waite,

1
buon lavoro. `" _OBJC_CLASS _ $ _ XXXXXClass ", a cui fa riferimento:` ,, aggiungi xxx Framework.
iHTCboy il

Spot on! Chiunque veda qualcosa con "xml" stampato controlla questo - nel mio caso era il framework "libxml" non collegato.
Evusas,

Dopo aver modificato l'introduzione del pod, si è verificato questo errore e tutti i metodi non sono stati corretti. Ma il tuo metodo risolve il problema. Nota: lib non può essere cercato.
Stellar Lee,

33

Ho riscontrato anche lo stesso problema, i metodi sopra non funzioneranno. Ho cancellato accidentalmente i file nella seguente directory su di esso.

Posizionamento delle cartelle:

~ / Library / Developer / Xcode / DerivedData /

inserisci qui la descrizione dell'immagine


3
Per quanto strano possa sembrare, questo ha funzionato davvero. Grazie compagno.
Felipe,

2
L'eliminazione manuale dei dati derivati ​​ha funzionato anche per me. Saluti!
L_Sonic,

7
Grazie! Vorrei aggiungere un suggerimento: la cartella è in / Utente / tuonome / Libreria / Sviluppatore / XCode / DerivedData
Stefano Buora,

Dovresti anche essere in grado di eliminare i dati derivati ​​usando il terminale: rm -rf ~ / Library / Developer / Xcode / DerivedData
simon_smiley

Mi ha salvato il tempo ... XDDD
Hsiao-Ting

25

Imposta Architetture su armv7 armv7s , Costruisci architettura attiva solo su NO , per ogni target nel progetto, incluso ognuno in Pod


Ha funzionato in qualche modo ... Ora sto ricevendo l'errore "Firma bitcode non valida".
JeremyF,

18

Ho risolto il mio controllando i file di implementazione selezionati nell'appartenenza di destinazione sul lato destro. Ciò è utile soprattutto per gestire le estensioni, ad esempio tastiere personalizzate.

Iscrizione target


Xcode 9 non si applica automaticamente, anche se spuntato la casella. Grazie.
Amro Shafie,

Questo era il problema. Grazie
Ignacio Hernández,

11

Ecco alcune spiegazioni del perché build_active_architectureè impostato su NO. Xcode ora rileva quali dispositivi sono stati collegati e imposterà l'architettura attiva di conseguenza. Quindi, se colleghi un iPod Touch di seconda generazione al tuo computer, Xcode dovrebbe impostare l'architettura attiva su armv6. Costruire il tuo obiettivo con la configurazione di debug sopra ora costruirà solo il binario armv6 per risparmiare tempo (a meno che tu non abbia un grande progetto potresti non notare la differenza ma immagino che i secondi si sommino nel tempo).

Quando crei una configurazione di distribuzione per la pubblicazione su App Store, assicurati che questa opzione non sia impostata, in modo che Xcode crei invece il binario universale fat http://useyourloaf.com/blog/2010/04/21/xcode -Build-attivo-architettura-only.html


È così incredibilmente FUBARed! L'output di XCode dipende dal dispositivo che hai collegato alla build machine!
Matt

6

Devi solo rimuovere arm64 da Valid Architecture e impostare NO su Active Architecture Only . Ora basta pulire, costruire ed eseguire. Non vedrai più questo errore.

:) KP


5

Risolto dopo aver eliminato il contenuto di DerivedData -> Build -> Products -> Debug-iphoneos


4

Questo potrebbe essere correlato libz.dylibo libz.tbd, è sufficiente aggiungerlo ai target per i binari di collegamento e provare a compilare di nuovo.


Stavo cercando di aggiungere il framework Tesseract e solo questo mi ha aiutato, grazie. !
HelloimDarius,

3

L'ho risolto impostando gli archi validi su armv7 armv7s e impostando costruire architetture attive solo su SÌ in fase di rilascio e quindi facendo una nuova "installazione pod" dalla riga di comando


3

Dato un iPhone 5s e non avendo ancora ricevuto una versione a 64 bit di una libreria di terze parti, ho dovuto tornare alla modalità a 32 bit con l'ultimo Xcode (prima della 5.1 non si lamentava).

Ho risolto questo problema eliminando arm64 dall'elenco Valid Architectures e quindi impostando Build Active Architecture Only su NO. Mi sembra che questo abbia più senso del contrario, come mostrato sopra. Sto postando nel caso in cui altre persone non riuscissero a far funzionare nessuna delle soluzioni sopra.


3

Ho avuto lo stesso problema dopo l'aggiornamento a Xcode 5.1 e risolto impostando Architectures su armv7 armv7s


3

Era stato bloccato su questo problema tutto il giorno.

Avevo più schemi, si stava compilando bene per Demo, Internal, Release - tuttavia lo schema di debug non si sarebbe compilato e si lamentava della mancanza di libPods.a.

La soluzione era quella di andare al Progetto -> Destinazione -> Crea impostazioni e modificare "Crea solo architettura attiva" in SÌ. Pulisci e costruisci! Finalmente sono state risolte le ore di prurito alla testa!


Non è lo stesso identico problema, ma simile. L'ho risolto con lo stesso metodo che hai fornito.
Helzgate,

2

L'impostazione -ObjCsu Other Linker FlagsBuild Settings del target ha risolto il problema.


2

Questo ha funzionato per me:

ios sdk 9.3

nell'impostazione di build dell'architettura valida app.xcodeproj: armv7 armv7s Build Architettura attiva: No

Pulito e costruito, ha funzionato per me.


1

Quanto segue ha funzionato per me per ottenere la compilazione di GPUImage senza errori su Xcode 5.1 sia per il simulatore a 64 bit sia per iPad Mini retina, senza la necessità di rimuovere arm64 dall'elenco Valid Architectures (che vanifica lo scopo di possedere un dispositivo a 64 bit per i test Prestazioni a 64 bit).

Scarica la cartella .zip dalla pagina GitHub: https://github.com/BradLarson/GPUImage

Decomprimi e vai alla cartella "framework". Da qui, aggiungi e copia la cartella "Source" nel tuo progetto Xcode. Assicurati che sia selezionata l'opzione "Copia elementi nella cartella del gruppo di destinazione" e che sia selezionato anche "Crea gruppi per qualsiasi cartella aggiunta". Ciò copierà i file di intestazione / implementazione generici, iOS e Mac nel tuo progetto.

Se non hai bisogno dei file Mac perché stai compilando per iOS, puoi eliminare la cartella Mac prima di copiare i file nel tuo progetto o semplicemente eliminare il gruppo dall'interno di Xcode.

Dopo aver aggiunto la cartella di origine al progetto, utilizzare quanto segue per iniziare a utilizzare le classi / i metodi di GPUImage:

#import "Source/GPUImage.h" 

Alcune cose da sottolineare:

  • Se ricevi un errore che dice "Cocoa" non trovato, hai aggiunto la cartella / le intestazioni del Mac al tuo progetto iOS - elimina semplicemente il gruppo / i file Mac dal tuo progetto e l'avvertimento svanirà
  • Se si rinomina la cartella Source (non il gruppo in Xcode), utilizzare quel nome invece di "Source / GPUImage.h" nell'istruzione #import. Pertanto, se si rinomina la cartella in GPUImageFiles prima di aggiungerla al progetto, utilizzare: #import "GPUImageFiles / GPUImage.h
  • Ovviamente assicurati che arm64 sia selezionato nell'elenco Valid Architectures per sfruttare il processore A7 a 64 bit!
  • Questo non è un bundle GPUImage.framework (ad esempio se hai scaricato il framework da http://www.raywenderlich.com/60968/ios-7-blur-effects-gpuimage ), quindi potrebbe non essere il modo corretto di utilizzare GPUImage che Brad Larson intendeva, ma funziona per il mio attuale progetto SpriteKit.
  • Non è necessario collegarsi a framework / librerie, ecc. È sufficiente importare l'intestazione e la cartella di origine dell'implementazione come descritto sopra

Spero che quanto sopra aiuti - sembra che non ci siano state istruzioni chiare da nessuna parte nonostante la domanda sia stata posta più volte, ma non temere, GPUImage funziona sicuramente per l'architettura arm64!


1

Questo problema si è verificato dopo l'installazione di un pod tramite Podfile e pod install. Dopo aver provato diverse correzioni, ho finalmente importato manualmente il Pod (trascinando i file necessari nel mio progetto) e questo ha risolto il problema.


che ha funzionato anche per me ma era un pod facile con un file.
iluvatar_GR,

1

Mentre la risposta di morisunshine puntava nella giusta direzione, un piccolo ritocco nella sua risposta ha risolto il mio problema con iOS 8.2. Grazie a lui.

Ho risolto questo problema impostando che:

ARCHS = armv7

VALID_ARCHS = armv6 armv7 armv7s arm64

BUILD ACTIVE ARCHITECTURE ONLY= NO

1
  1. Vai alle impostazioni di costruzione target.
  2. impostare SOLO ARCHITETTURA ATTIVA = NO per Debug e Release
  3. Costruisci ed esegui

3
impostare BUILD ACTIVE ARCHITECTURE SOLO su NO anche nel progetto PODS!
Elad

1

Nel mio caso, ho dovuto cercare

C++ Standard Librarye assicurati che quello libc++fosse quello selezionato.


1

Per quanto mi riguarda, utilizzo opencv 2.4.9 in xcode 7.2 per iOS e si sono verificati gli errori sopra riportati, e risolvo gli errori utilizzando opencv tramite pod pod invece che offline opencv framework.

Puoi provare aggiungendo il testo del pod opencv qui sotto ed eliminare il framework opencv offline se lo hai usato.

pod "OpenCV", "2.4.9"


1

Nessuna delle soluzioni risolve questo errore nel mio caso (Xcode 9), con TesseractOCRiOS. Dopo ore di tentativi ed errori, ho trovato una buona soluzione. Ho appena eliminato 'pod 'TesseractOCRiOS', '~> 4.0.0'nel Podfile, corri pod install. E poi, aggiungi di pod 'TesseractOCRiOS', '~> 4.0.0'nuovo Podfileed esegui di pod installnuovo.

Scoppio! Funziona!


1

"Il target OPN [Debug] sovrascrive l'impostazione di build OTHER_LDFLAGS". Questo è stato il problema principale. Dopo aver aggiunto $ (ereditato) in una nuova riga in altri flag linker ho risolto il mio problema. inserisci qui la descrizione dell'immagine


1

in alcuni casi, se si definisce un'altra interfaccia in un file .h, ma non si implementano tutte queste interfacce, si è verificato questo errore.

Il linker non ha trovato l'implementazione nel file .m, quindi è necessario implementarla nel file .m per ogni interfaccia.

Per risolvere questo errore:

File 1.in .m, fornire l'implementazione per ciascuna interfaccia. 2.rebuild



0

Ho riscontrato lo stesso problema dopo aver installato il framework AWS per superare questo problema, ho aggiornato il file di configurazione POD dal tuo progetto che viene creato dopo l'installazione di AWS POD. Controlla il file di configurazione come di seguito

OTHER_LDFLAGS = $(inherited) -ObjC -l"Pods-AWSAutoScaling" -l"
Pods-   AWSCloudWatch" -l"Pods-AWSCognito" -l"Pods-AWSCore" -l
"Pods-AWSDynamoDB" -l"Pods-AWSEC2" -l"Pods-AWSElasticLoadBalancing" 
-l"Pods-AWSKinesis" -l"Pods-AWSLambda" -l"Pods-AWSMachineLearning" 
-l"Pods-AWSS3" -l"Pods-AWSSES" -l"Pods-AWSSNS" -l"
Pods-AWSSQS"-l "Pods-AWSSimpleDB" -l"Pods-Bolts" -l"Pods-FMDB" 
-l"Pods-GZIP" -l"Pods-Mantle" -l"Pods-Reachability" -l"Pods-TMCache" 
-l"Pods-UICKeyChainStore" -l"Pods-XMLDictionary" -l"sqlite3" -l
"z"-framework "Accelerate" -framework "AssetsLibrary" 
-framework "CoreLocation" -framework "Foundation" -framework
"ImageIO" -framework "Security" -framework "SystemConfiguration"
-framework "UIKit" -weak_framework "UIKit"
 OTHER_LIBTOOLFLAGS = $(OTHER_LDFLAGS)   

se il tuo file di configurazione non funziona correttamente, imposta il flag Altro linker su $ (ereditato)


0

Se le impostazioni dell'architettura e del linker sembrano buone, controlla i tuoi file h. Il mio problema era lo stesso errore, ma avevo ristrutturato i file h e ho rimosso un'istruzione extern. Altri file m stavano usando quella variabile, causando l'errore del linker.


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.