Errore di compilazione: architettura richiesta i386 mancante nel file


105

Ricevo questo errore durante la creazione della mia applicazione per iPhone:

ld: warning: in /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit, manca l'architettura richiesta i386 nel file

È lo stesso per tutti i framework nella mia app. È molto strano poiché questo non stava accadendo prima.


È successo dopo aver installato Snow Leopard e il nuovo iPhone SDK (Xcode 3.2)?
avocade

8
La mia risposta risolve il problema. Si prega di controllare.
Giordania

9
Un'altra possibilità non discussa nelle risposte è che riceverai questo errore se hai aggiunto un riferimento a un framework non universale (cioè hai aggiunto un framework armv6 / armv7 e poi hai provato a creare un simulatore). Questa è principalmente una preoccupazione se hai creato i tuoi framework personalizzati.
aroth

Anche @aroth è corretto, controlla questa domanda
ArkReversed il

Risposte:


131

Ciò accade quando aggiungi un framework al tuo progetto e copi involontariamente il framework nella directory del tuo progetto.

La soluzione consiste nel controllare la directory del progetto (dove memorizzi il progetto su disco) per qualsiasi file SDK * .Framework per iPhone ed eliminarli.

Il progetto andrà bene in seguito.


4
inoltre, provalo sul dispositivo iOS invece che sul simulatore.
Raptor

Se hai un altro framework, la modifica del file di progetto sembra eliminare anche i riferimenti a quello, ha funzionato, ed è stato più facile, grazie Jordan
texiano

Non funziona per me. Nessun file .framework nella directory del mio progetto. Fwiw, ho fatto una pulizia e poi una build e questo problema è iniziato. Il pulito in qualche modo deve aver rotto le cose.
Alyoshak

85

Ho avuto lo stesso problema e la soluzione si è rivelata una soluzione facile. Esegui il backup, quindi apri project.pbxproj (che si trova all'interno del bundle del file di progetto) in TextMate o TextEdit e cerca la sezione intitolata "/ * Begin XCBuildConfiguration section * /". Cerca una chiave denominata FRAMEWORK_SEARCH_PATHS ed eliminala e il suo contenuto (una volta per configurazione build, quindi l'ho rimossa in due punti). Ecco un esempio di ciò che ho eliminato:

FRAMEWORK_SEARCH_PATHS = (
"$(inherited)",
"\"$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library/Frameworks\"",);

Il mio progetto ora è costruito sia per il dispositivo iPhone che per iPhoneSimulator.


2
Posso verificare che funzioni come descritto. Sembra che Xcode possa facilmente perdere il contatto con i suoi metadati quando si spostano i proj Xcode tra computer diversi; in questo caso con uno con 3.0 e Leopard e l'altro con 3.1 e Snow Leopard installati. I metadati di FRAMEWORK_SEARCH_PATHS vengono visualizzati come vuoti nelle impostazioni di compilazione mentre il progetto effettivo.pbxproj contiene elementi.
avocade

1
Anche FRAMEWORK_SEARCH_PATHS concordato sono stati visualizzati come vuoti nelle impostazioni di build anche per me. Tuttavia, la modifica manuale del file project.pbxproj come descritto ha risolto il problema.
Alasdair Allan

11
Questo non ha funzionato per me. TUTTAVIA, mi conduci nel posto giusto per guardare. Il mio .pbxproj non aveva la chiave FRAMEWORK_SEARCH_PATHS, ma una chiave denominata LIBRARY_SEARCH_PATHS.
ribellione

Secondo @rebellion. Forse le versioni più recenti di XCode hanno cambiato il nome della chiave.
Moshe

Grazie, ho anche una chiave LIBRARY_SEARCH_PATHS randagi nel mio file pbxproj. La chiave appariva in grassetto nelle impostazioni del progetto in Xcode 3, ma senza valore. Questo mi ha portato a credere che ci fosse qualcosa che non andava. Ho aperto il progetto in Xcode 4 Preview 5 una volta, dopodiché è successo.
mvexel

43

Quello che è successo qui è che Xcode ha aggiunto misteriosamente una voce "Framework Search Paths" che punta a un particolare SDK del dispositivo iPhone. Ad esempio, il mio è stato recentemente impostato su:

$(DEVELOPER_DIR)/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS2.2.1.sdk/System/Library/Frameworks

Questo porta il compilatore a trovare i framework dell'architettura errata. La rimozione di qualsiasi valore sotto la chiave "Framework Search Paths" nelle impostazioni di build del target risolverà il problema.


questo era il problema nel mio caso. aveva aggiunto un mucchio di directory di ricerca ogni volta che aggiungo una nuova libreria. anche se rimuovo il riferimento, la voce della directory di ricerca era lì che aveva causato il problema.
darshansonde

"Framework Search Paths" sono già vuoti nel mio caso. L'errore esatto che ricevo è ld: compilazione per iOS Simulator, ma collegamento a dylib creato per il file MacOSX '/usr/lib/libSystem.B.dylib' per architettura i386 clang: errore: comando linker non riuscito con codice di uscita 1 ( usa -v per vedere l'invocazione) Sto usando SDK 7.0 su Mavericks.
Ans

Ho avuto lo stesso errore, ho rimosso i valori dal percorso di ricerca del framework in Impostazioni build e ora si compila correttamente.
Nirav

10

Volevo solo menzionare che in XCode se vai su "Modifica impostazioni progetto" e trovi "Percorsi di ricerca" C'è un campo per "Percorsi di ricerca del framework". L'aggiornamento dovrebbe risolvere il problema, senza dover hackerare il file di progetto!

Saluti!

Jesse


Ho lo stesso problema che mi sta facendo impazzire. Sembra che voi ragazzi conosciate la soluzione, ma non riesco a trovare il file "project.pbxproj" e non riesco a trovare dove si trova "Modifica impostazioni progetto".
saman01

2
In XCode 4.2.1 ho trovato questo: fare clic sul nome del progetto nel Navigatore progetto. Nella schermata delle proprietà che appare, seleziona la scheda "Impostazioni build". I percorsi di ricerca si trovano in questa schermata. Eliminarli ha funzionato per me.
dsteele

8

Verifica di non aver copiato il framework nel tuo progetto quando lo hai aggiunto. Se l'hai copiato, non riesce a trovare i percorsi originali. Per risolvere questo problema. Elimina il framework AVFoundation dalla cartella dei framework nel tuo progetto, quindi aggiungilo di nuovo, ma questa volta assicurati di non avere il segno di spunta di copia.

Questo ha risolto per me!


8

L'ho risolto in un modo diverso.Il motivo per cui ho ricevuto questo errore era che ho aggiunto security.framework due volte nel mio progetto.Non sono stato in grado di vedere il framework di sicurezza in xcode, ho aperto il progetto nel Finder e ho trovato questo framework che ho cancellato e risolto il problema.


7

Se la tua app è pensata per essere eseguita sul dispositivo, assicurati di non tentare di eseguirla sul simulatore. Può sembrare ovvio, ma controlla comunque.


5

Sebbene sia possibile che qualcosa sia stato cancellato, è stata la mia esperienza che qualcosa si è incasinato nel file di progetto. Devo ancora definire cosa sia quel "qualcosa". Ho riscontrato problemi simili durante l'installazione dell'SDK. Ci sono un paio di opzioni.

Innanzitutto, aggiungi tutti i tuoi file a un nuovo progetto. Di solito questo sembra funzionare. Un po 'un dolore, però.

In secondo luogo, puoi fare clic con il pulsante destro del mouse sul progetto in XCode / Ottieni informazioni / Build / Library Search Paths. Aggiungi nuovi percorsi simili a /Developer/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator3.1.sdk/usr/lib. Aggiungi le versioni appropriate di quella stringa per ogni versione (2.2.1, ecc.) E piattaforma (simulatore o iPhoneOS). Esegui un'azione simile per i percorsi di ricerca dei framework se i framework sono il tuo problema.

Terzo, che è più lavoro ma più affidabile, è aprire project.pbxproj da MyProject.xcodeproj (Textmate è buono per questo). Cerca "/ * Begin XCBuildConfiguration section * /", quindi "LIBRARY_SEARCH_PATHS" e "FRAMEWORK_SEARCH_PATHS". Aggiungere o modificare i percorsi in base alle esigenze e salvare il file.

In ogni caso, un dolore al sedere, e mi piacerebbe sicuramente individuare la causa perché mi è capitato un paio di volte. Il progetto si sviluppa bene, poi si avvia e si rifiuta di farlo con quella che sembra essere una piccola ragione.


Inizierò solo un nuovo progetto. Oh pozzi.
Gabe Shahbazian,

È possibile correggere le impostazioni di compilazione dei "Percorsi di ricerca dei framework" dal pannello delle informazioni di un target.
John Cromartie,

Ho ricevuto l'errore ma non ho riscontrato i problemi relativi ai framework descritti sopra. Curiosamente, su un computer, il progetto poteva essere controllato da SVN e costruito bene, mentre su altri due si verificava improvvisamente questo errore in ogni build. L'unica (e piuttosto semplice) soluzione - dopo aver provato tutti i tipi di altre soluzioni - era creare un nuovo progetto vuoto e spostare tutti i file al suo interno.
mmattke l'

Questo metodo ha funzionato per me. Avevo un progetto di lavoro impostato che improvvisamente ha smesso di costruire per esattamente una configurazione un giorno. Nessuna ragione. Ho utilizzato la tecnica textmate sopra e ho notato che "$ (SDKROOT) / Developer / Library / Frameworks" mancava da quella configurazione. Non ho idea del perché e non sono stato in grado di vederlo usando Xcode.
Rob

4

"Modifica impostazioni progetto" e trova "Percorsi di ricerca" C'è un campo per "Percorsi di ricerca del framework". cancella tutto!!


4

È successo anche qui a me. Grazie a un ottimo partner abbiamo trovato la risposta. Il tuo Xcode potrebbe puntare al simulatore .. sostituiscilo con un dispositivo IOS ..costruito senza problemi dopo ....


1

Esegui il comando file sul framework da Terminale:

file /Developer/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS3.1.sdk/System/Library /Frameworks/UIKit.framework/UIKit

Dovresti ricevere un messaggio che ti dice con quali architetture è compatibile il binario UIKit. Se non vedi "i386" elencato, allora sei riuscito in qualche modo a rimuovere la versione i386 di UIKit, il che significa che non puoi costruire per il simulatore. Per risolvere il problema, dovrai reinstallare l'SDK.

Se ricevi qualche altro errore, si spera che ti aiuti a capire qual è il problema reale.


Reinstallato l'SDK e ottengo ancora lo stesso errore di build esatto.
Gabe Shahbazian,

sto avendo questo problema. framework già controllato e percorso della libreria e sono puliti. il file di comando /Developer/Platforms.../UIKit.framework/UIKit dice solo "braccio libreria condivisa collegato dinamicamente Mach-O". è davvero necessario installare l'intero SDK? oppure posso copiare la versione completa del framework?
Alexander Fradiani

Buono da imparare! per il mio caso, armv7 e i386 sono presenti, ma non armv6!
Nianliang

1

Voglio solo farti sapere che nel mio caso, stavo avendo lo stesso problema, mi sono reso conto che avevo una vecchia cartella Xcode chiamata Xcode3.1.3 l'ho rinominata semplicemente perché era una versione precedente e questo ha fatto la magia per me.


1

Controlla i percorsi di ricerca della libreria nelle impostazioni di destinazione. A volte vengono inserite librerie sciocche e questo ti darà un errore simile.

È possibile rimuovere tutte le voci in questa sezione.


0

Avevo appena sperimentato qualcosa di leggermente diverso, perché lavoro sulla mia libreria (WM_GSRecognizerLib), ma l'errore è lo stesso.

Cosa sarebbe successo: a causa di alcuni aggiornamenti, il percorso che mirava alla lib da includere (.a) proveniva dalla cartella "Debug-iphoneos" (dove viene generato). La compilazione per dispositivi iOS generici ha funzionato bene, ma non per il simulatore, lamentando l'assenza dell'architettura i386.

Quello che ho fatto per questo problema è stato includere anche i file binari dalla cartella "Debug-iphonesimulator".

Può aiutare per questo argomento, perché la spiegazione è qui: i dispositivi richiedono i binari per arm64 / armv7 / armv7s, mentre il simulatore ha bisogno di i386.


0

La mia soluzione era impostare il debug di destinazione del simulatore SÌ, basta guardare su git status per vedere la nuova riga aggiunta come architettura solo su .project. se non lo imposti, la build verrà eseguita su tutte le architetture e mostrerà alcune architetture mancanti come i386 o altro. NOTA CHE ovviamente il problema principale è utilizzare un framework che implementa un qualche tipo di architettura specifica.


-1

Anch'io ho ricevuto lo stesso errore che sto usando xcode versione 4.0.2, quindi quello che ho fatto è stato selezionare il file di progetto xcode e da loro ho selezionato l'opzione Target ho potuto vedere l'app del mio progetto, quindi ho fatto clic su di esso e sono andato alla build opzione delle impostazioni.

Loro nell'opzione di ricerca ho digitato il percorso di ricerca di Framework cancellato tutte le impostazioni, quindi fatto clic sul pulsante di creazione e per me ha funzionato bene,

Grazie e saluti

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.