2013-07-01 11 views
23

Właśnie skompilowałem projekt i Xcode zwraca te dwa błędy, które nie wydają się być błędem mojego kodu. Jak mogę je naprawić?Xcode daje błąd łącznika 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

Chcesz pokazać powiązany kod? –

+0

Problem dotyczy pliku 'UIImage + Blur.m'. Szuka symbolu o nazwie "vImageBoxConvolve_ARGB8888". Musisz dołączyć plik .m (lub .c), który ma ten symbol. – rmaddy

+0

Spójrz na te linki, są bardzo podobne: http://stackoverflow.com/questions/22032987/how-to-solve-mouse-o-linker-error-in-ios--x7-1-5 http://stackoverflow.com/questions/20073146/mach-o-linker-error-xcode-5 – user3817794

Odpowiedz

40

Nauczanie człowieka (lub kobiety) jak dla ryb:

Zazwyczaj Mach-O Linker Error oznacza, że ​​nie zostały uwzględnione plik nagłówka dla używanej funkcji w kodzie.

Najprostszym sposobem jest skopiowanie tej funkcji lub wywołanie metody i wklejenie do szybkiego wyszukiwania Xcode za pomocą komendy shift + + O. Spowoduje to przeszukiwanie wszystkich frameworków (i plików nagłówkowych), odnajdzie wywołanie funkcji lub metody i pokaże jej lokalizację (w tym przypadku nagłówek):

W tym przypadku to połączenie należy do struktury Accelerate, więc na wierzchu plik, wprowadź:

#import <Accelerate/Accelerate.h> 

Podczas szybkiego wyszukiwania może być konieczne pozbycie się wiodącego podkreślenia. Innymi słowy, szukaj vImageBoxConvolve_ARGB8888

nadzieję, że to pomaga

+19

To nie jest dokładne. Błędy Linker tego rodzaju są najczęściej spowodowane brakiem połączenia z frameworkiem lub biblioteką, która dostarcza symbol, którego używasz. Jeśli nie zdołasz "# include" lub "# import" niezbędnego nagłówka, znacznie częściej otrzymasz ostrzeżenie w stylu 'warning: niejawna deklaracja funkcji 'vImageBoxConvolve_ARGB8888' jest niepoprawna w C99'. Dodanie brakującego "# include" lub "# import" zajmie się ostrzeżeniem kompilatora, ale nie zrobi nic, by adresować błąd linkera. – bdash

+2

To jest dobry sposób na sprawdzenie, którego szkieletu brakuje. –

+0

Nie mogę znaleźć brakującej biblioteki, czy możesz mi powiedzieć, jak dowiedzieć się, której biblioteki brakuje. –

11

Google jest twoim przyjacielem: ktoś inny naprawił to przez dodanie struktury Accelerate do swojego projektu (i wygląda to jak błąd ramy).

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

Upewnij się, że również ramy QuartzCore również uwzględnione, jako że jest również wymagane przez tę bibliotekę.

+0

Nie jest konieczne łączenie z QuartzCore w celu użycia struktury Accelerate. – bdash

+1

Nie powiedziałem, że to było. Biblioteka, której używa - RNBlurModalView - wymaga działania QuartzCore i Accelerate. Szanse są dobre, jeśli jeden został pominięty, drugi też, więc dodałem go jako notatkę w mojej odpowiedzi. – Xono

+0

+1: to działa idealnie dla mnie –

1

Widocznie vImageBoxConvolve_ARGB8888() nie jest zdefiniowana. Sprawdź, czy struktura Accelerate jest odpowiednio uwzględniona w projekcie.

Powiązane problemy