Cocoapods OpenCV 2.4.10 Ошибка компоновщика

Я пытаюсь создать простой проект с использованием OpenCV 2.4.10, но получаю кучу таких ошибок:

Undefined symbols for architecture x86_64:
  "_jpeg_free_large", referenced from:
      _free_pool in opencv2(jmemmgr.o)
  "_jpeg_free_small", referenced from:
      _free_pool in opencv2(jmemmgr.o)
      _self_destruct in opencv2(jmemmgr.o)

Вот ViewController.m

#import "ViewController.h"
#import <opencv2/opencv.hpp>

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    cv::Mat greyMat;
}

Подфайл

platform :ios, '8.1'

pod 'OpenCV', '2.4.10'

Проект прекрасно строится, когда я использую версию 2.4.9.1 или 2.4.9.
Я также смог собрать этот проект с файлом фреймворка, загруженным по URL-адресу, который я нашел в podspec 2.4.10.


person foobarbaz    schedule 04.02.2015    source источник
comment
Человек, который проголосовал против - пожалуйста, также скажите, ПОЧЕМУ вы проголосовали за него. Проблема существует.   -  person Tõnu Samuel    schedule 09.02.2015


Ответы (6)


Я добавил новые версии OpenCV в CocoaPods (2.4.11, 2.4.12, 2.4.12.3, 3.0.0).

2.4.11, 2.4.12 и 2.4.12.3 нужно, чтобы libjpeg был связан, поэтому теперь модуль фактически загружает репозиторий, компилирует из исходного кода, а затем связывает libjpeg в дополнение к файлу opencv2.framework. Теперь это работает из коробки через CocoaPods, однако при выполнении pod install требуется некоторое время, поскольку он компилируется из исходного кода. Просто не отменяйте его, пока он это делает (в CocoaPods есть ошибка, которая вызывает вопросы, если он отменен).

Под капотом 3.0.0 работает так же, как и раньше, с готовым файлом opencv2.framework, и теперь его можно без проблем установить через CocoaPods.

Версия 2.4.10 все еще не работает в CocoaPods, но поскольку эта версия выдает ошибки при компиляции из исходного кода на моей машине, я мало что могу сделать.

(Примечание: я не являюсь первоначальным сопровождающим модуля, я просто добавил эти новые версии.)

person Kyle Fleming    schedule 25.11.2015
comment
Увы, при использовании даже очень простого подфайла ничего из этого не работает: pastebin.com/hbjNTF9H - person shmim; 15.01.2016
comment
шмим, это очень странно. Что происходит, когда вы переходите на download.sourceforge. сеть/проект/opencvlibrary/opencv-ios/3.0.0/ ? У вас есть возможность скачать файл? - person Kyle Fleming; 16.01.2016
comment
Ссылки на sourceforge не работали, когда я разместил свой комментарий, но сейчас они, похоже, работают. Я слышал об этом раньше... Загрузка 3.0, и я предполагаю, что это работает, хотя я еще не проверял это. Однако все версии 2.4.11, 2.4.12, 2.4.12.3 выдают ошибки компиляции: paste.ee/p/ACvj0 - person shmim; 16.01.2016

Ошибка 4052 для версии 2.4.10 все еще не решена, а модуля для версии 2.4.11 нет, поэтому вам придется использовать версию 2.4.9. какая ИМО стабильна.

Если вы используете капсулы

pod 'OpenCV', '2.4.9'
person Zeeshan    schedule 07.04.2015
comment
Похоже, что дистрибутив pod не работает (ошибки ссылки на SourceForge). См. stackoverflow.com/a/31226206/1375695 для исправления. - person foundry; 05.07.2015

Итак, вот небольшой обходной путь. Проблема в том, что проект XCode не может связать библиотеку libjpeg.a. Вот почему вы получаете вышеуказанные ошибки при компиляции проекта.

Следуй этим шагам :

  1. Перейдите по ссылке: [[http://sourceforge.net/projects/libjpeg-turbo/files/1.4.0/]] и загрузите файл libjpeg-turbo-1.4.0.dmg (3,8 МБ).
  2. Установите пакет. После этого вы найдете установленные файлы по этому пути: /opt/libjpeg-turbo/lib
  3. Откройте терминал и введите следующую команду: lipo -info /opt/libjpeg-turbo/lib/libjpeg.a
  4. If the terminal shows the following the output after running the command then it means, you can use the library for your iOS project(armv7/armv7s)
    • Architectures in the fat file: /opt/libjpeg-turbo/lib/libturbojpeg.a are: i386 x86_64 armv6 armv7 armv7s arm64*
  5. Используйте Finder, чтобы перейти к: /opt/libjpeg-turbo/lib, скопировать libjpeg.a и поместить его в папку вашего проекта.
  6. Перейдите к своему проекту XCode -> Нажмите «Имя проекта» -> «Цели» -> «Общие» -> «Связанные фреймворки и библиотеки» -> нажмите кнопку «Добавить», расположенную внизу -> включите файл libjpeg.a
  7. Скомпилируйте проект. Он больше не должен показывать ошибок компоновщика libjpeg.
person Varun Ram    schedule 21.04.2015
comment
Этот мануал крутой! Спасибо! Я просто добавил libjpeg.a из /opt/libjpeg-turbo/lib в свой проект. Но мне пришлось отключить опцию биткода в настройках проекта. Потому что, как я понял, эта библиотека была скомпилирована без опции биткода. - person Vladimir Vlasov; 31.07.2016
comment
Недавно я настроился для изучения OpenCV на iOS и обнаружил, что рекомендуемая инструкция по добавлению libjpeg.a в мой проект не решает проблему. Вместо неопределенных символов я получил много повторяющихся символов. Я придумал хак, чтобы исправить это, который заключался в загрузке исходников OpenCV, захвате следующих 8 файлов и добавлении их в мой проект iOS. Это повлияло на определение символов, экспортируемых jmemansi.c. Я недостаточно знаю XCode или систему сборки, используемую в OpenCV, чтобы сделать более элегантное исправление, но я подумал, что передам решение, которое сработало для меня. - person Jamie Fenton; 11.08.2016
comment
Список файлов, которые я скопировал в свой проект: jconfig.h jinclude.h memsys.h jpegint.h jerror.h memansi.c jmorecfg.h jpeglib.h - person Jamie Fenton; 11.08.2016

Кажется, это проблема с текущей версией Open CV для iOS.

Ошибка № 4052

Вероятно, придется продолжать использовать 2.4.9.

person paperpusher    schedule 02.03.2015
comment
Невозможно использовать 2.4.9, так как приложения теперь должны быть 64-битными. - person ahwulf; 20.04.2015

У меня нет решения для этого, но у меня есть обходной путь здесь. Я скачал проект с здесь . И скопировал фреймворк и шапку из этого проекта в свой проект. введите здесь описание изображения

person souvickcse    schedule 23.03.2015

Та же проблема, с которой я столкнулся при открытии CV, и нашел полезную ссылку ниже, которая устранила мои ошибки в моем проекте:

http://blog.csdn.net/iOSLearner_Nana/article/details/45174365

person Dilip Saket    schedule 23.01.2018