Xcode выдает ошибку компоновщика Apple Mach-O

Я только что скомпилировал проект, и Xcode возвращает эти две ошибки, которые не кажутся ошибкой моего кода. Как их исправить?

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)

person kuranes    schedule 01.07.2013    source источник
comment
Хотите показать соответствующий код?   -  person Carl Norum    schedule 02.07.2013
comment
Проблема с файлом UIImage+Blur.m. Он ищет символ с именем vImageBoxConvolve_ARGB8888. Вам необходимо включить файл .m (или .c) с этим символом.   -  person rmaddy    schedule 02.07.2013
comment
Посмотрите на эти ссылки, они очень похожи: stackoverflow.com/questions/22032987/ stackoverflow.com/questions/20073146/   -  person user3817794    schedule 22.07.2014


Ответы (3)


Обучение мужчины (или женщины) рыбной ловле:

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

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

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

#import <Accelerate/Accelerate.h>

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

Надеюсь это поможет

person Khaled Barazi    schedule 02.07.2013
comment
Это не точно. Ошибки компоновщика такого рода чаще всего возникают из-за невозможности компоновки с фреймворком или библиотекой, предоставляющей используемый символ. Если вам не удастся #include или #import указать необходимый заголовок, вы, скорее всего, получите предупреждение, похожее на warning: implicit declaration of function 'vImageBoxConvolve_ARGB8888' is invalid in C99. Добавление отсутствующих #include или #import устранит предупреждение компилятора, но ничего не сделает для устранения ошибки компоновщика. - person bdash; 05.07.2013
comment
Это хороший способ узнать, какой фреймворк вам не хватает. - person Pete; 23.04.2014
comment
Не могу найти пропавшую библиотеку, подскажите пожалуйста как узнать какой библиотеки не хватает. - person Anas Azeem; 08.07.2014

Google — ваш друг: кто-то еще исправил это, добавив в свой проект фреймворк Accelerate (и это действительно похоже на ошибку фреймворка).

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

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

person Xono    schedule 01.07.2013
comment
Нет необходимости связываться с QuartzCore, чтобы использовать платформу Accelerate. - person bdash; 05.07.2013
comment
Я не говорил, что это было. Используемая им библиотека — RNBlurModalView — требует для работы как QuartzCore, так и Accelerate. Скорее всего, если один был опущен, другой тоже, поэтому я добавил его в качестве примечания к своему ответу. - person Xono; 05.07.2013

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

person Rajan Twanabashu    schedule 07.09.2015