2013-07-01 8 views
23

Ho appena compilato un progetto e Xcode restituisce questi due errori che non sembrano essere il mio errore. Come posso risolverli?Xcode fornisce errore di collegamento Apple Mach-O

Undefined symbols for architecture i386: 
    "_vImageBoxConvolve_ARGB8888", referenced from: 
     -[UIImage(Blur) boxblurImageWithBlur:] in UIImage+Blur.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+1

Attenzione a mostrare il codice relativo? –

+0

Il problema è con il file 'UIImage + Blur.m'. Sta cercando un simbolo chiamato 'vImageBoxConvolve_ARGB8888'. È necessario includere il file .m (o .c) con questo simbolo. – rmaddy

+0

Guarda questi link, sono molto simili: http://stackoverflow.com/questions/22032987/how-to-solve-mach-o-linker-error-in-ios7-xcode-5-0-1 http://stackoverflow.com/questions/20073146/mach-o-linker-error-xcode-5 – user3817794

risposta

40

Insegnare un uomo (o una donna) a pescare:

solito Mach-O Linker errore significa che non avete incluso un file di intestazione per una funzione che si sta utilizzando nel codice.

Il modo più semplice è copiare la funzione o il metodo di chiamata e incolla nella ricerca rapida Xcode usando shift + command + O. Questo cercherà tutti i framework (e file di intestazione), troverà quella funzione o chiamata del metodo e mostrerà la sua posizione (l'intestazione in questo caso):

In questo caso, questa chiamata appartiene al framework Accelerate, quindi in cima al tuo file, immettere:

#import <Accelerate/Accelerate.h> 

Quando si effettua una ricerca rapida, potrebbe essere necessario eliminare il trattino di sottolineatura principale. In altre parole, la ricerca di vImageBoxConvolve_ARGB8888

Spero che questo aiuti

+19

Questo non è accurato. Gli errori di linker di questa natura sono più frequentemente dovuti al mancato collegamento al framework o alla libreria che fornisce un simbolo che stai utilizzando. Se non riesci a "# include" o "# importa" l'intestazione necessaria hai molto più probabilità di ricevere un avvertimento sulla falsariga di "avvertenza: la dichiarazione implicita di funzione" vImageBoxConvolve_ARGB8888 "non è valida in C99". L'aggiunta di '# include' o' # import' mancanti risponderà all'avvertimento del compilatore, ma non fa nulla per risolvere l'errore del linker. – bdash

+2

Questo è un buon modo per scoprire quale framework ti manca anche se –

+0

Non riesco a trovare la libreria mancante, puoi dirmi come scoprire quale libreria manca. –

11

Google è tuo amico: qualcun altro ha risolto questo problema aggiungendo il framework Accelerate al proprio progetto (e questo sembra un errore di framework).

https://github.com/rnystrom/RNBlurModalView/issues/5

assicurarsi di avere anche il quadro QuartzCore incluso così, come che è anche richiesto da quella libreria.

+0

Non è necessario eseguire il collegamento con QuartzCore per utilizzare il framework Accelerate. – bdash

+1

Non ho detto che fosse. La libreria che sta usando - RNBlurModalView - richiede sia il funzionamento di QuartzCore che quello dell'accelerazione. Le probabilità sono buone se una è stata esclusa, l'altra era troppo, quindi l'ho aggiunta come nota nella mia risposta. – Xono

+0

+1: questo funziona perfettamente per me –

1

Apparentemente vImageBoxConvolve_ARGB8888() non è definito. Verifica se il framework Accelerate è correttamente incluso nel progetto.

Problemi correlati