2013-07-01 4 views
23

Я только что скомпилировал проект, и Xcode возвращает эти две ошибки, которые, похоже, не являются ошибкой моего кода. Как их исправить?Xcode дает ошибку компоновщика 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

Уточнить соответствующий код? –

+0

Проблема с файлом 'UIImage + Blur.m'. Он ищет символ с именем 'vImageBoxConvolve_ARGB8888'. Вам нужно включить файл .m (или .c), который имеет этот символ. – rmaddy

+0

Посмотрите на эти ссылки, они очень похожи: 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

ответ

40

Научить человек (или женщина), как рыбу:

Обычно Mach-O Linker Error означает, что вы не включили в файл заголовок для функции вы используете в вашем коде.

Самый простой способ - скопировать вызов этой функции или метода и вставить в быстрый поиск Xcode с помощью команды shift + + O. Это будет искать все фреймворки (и файлы заголовков), найти вызов функции или метода и показать вам его местоположение (заголовок в этом случае):

В этом случае этот вызов принадлежит структуре Accelerate, поэтому поверх вашего файл, введите:

#import <Accelerate/Accelerate.h> 

При выполнении быстрого поиска вам, возможно, придется избавиться от подчеркивания. Другими слова, поиск vImageBoxConvolve_ARGB8888

Надеется, что это помогает

+19

Это неточно. Ошибки компоновщика такого рода чаще всего возникают из-за невозможности связать себя с каркасом или библиотекой, которая предоставляет символ, который вы используете. Если вы не используете '# include' или' # import' необходимый заголовок, вы, скорее всего, получите предупреждение в строках 'warning: неявное объявление функции 'vImageBoxConvolve_ARGB8888' недействительно в C99'. Добавление отсутствующего символа '# include' или' # import' будет адресовать предупреждение компилятора, но ничего не делает для устранения ошибки компоновщика. – bdash

+2

Это хороший способ узнать, какие рамки вам не хватает, но –

+0

Я не могу найти недостающую библиотеку, не могли бы вы рассказать мне, как узнать, какая библиотека отсутствует. –

11

Google является вашим другом: кто-то исправил, добавив рамки ускориться к их проекту (и это выглядит как рамочный ошибки).

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

Убедитесь, что у вас также есть рамки QuartzCore включены также, как это также требует библиотеки.

+0

Нет необходимости связываться с QuartzCore для использования инфраструктуры Accelerate. – bdash

+1

Я этого не говорил. Библиотека, которую он использует - RNBlurModalView, требует как QuartzCore, так и Accelerate для работы. Шансы хороши, если кто-то забыл, другой тоже, поэтому я добавил его в качестве примечания в своем ответе. – Xono

+0

+1: это отлично работает для меня –

1

Видимо vImageBoxConvolve_ARGB8888() не определены. Посмотрите, правильно ли включена структура ускорения в проекте.

Смежные вопросы