Как включить OpenCV в приложение какао? - PullRequest
7 голосов
/ 28 сентября 2010

Когда я создаю проект xCode с шаблоном 'Command Line Tool' c ++ stdc ++, я могу включать и компилировать заголовки opencv и запускать некоторый код.

Но я хочу использовать OpenCV в контексте «Cocoa Application».При создании с этим шаблоном, я получаю ошибки компиляции, когда я включаю заголовки OpenCV в main.mm.(Я уже изменил main.m на main.mm, '// NSApplicationMain (argc, (const char **) argv);' закомментирован)

Одна из этих ошибок: «Выражения-выраженияразрешены только внутри функций "

Я предполагаю, что это какая-то ошибка версии компилятора, но когда я сравниваю настройки сборки проекта, я не могу найти различия.

Есть ли у вас какие-либо идеи / опыт?

Ответы [ 6 ]

18 голосов
/ 10 декабря 2010

Я столкнулся с той же проблемой, я потратил 2 дня на серьезную трассировку системы, и, как и ожидалось, решение было настолько простым, что 8-летний мог найти его быстрее, чем я.

Готов к этому?

В файле .mm, где вы хотите использовать OpenCV, вам нужно сделать #include "opencv2/opencv.hpp" ДО любых других включений. Это оно! Просто переместите его вверх по линии и наблюдайте, как ваша проблема волшебным образом исчезает быстрее, чем тот коврик, который действительно связал комнату.

Кстати, для OpenCV 2.2, отсюда и новый включаемый файл. Также, если ваш проект XCode использует файл заголовка префикса (смотрите файл «YourProjectName_Prefix.pch» в «Других источниках»), вам нужно поместить туда #include "opencv2/opencv.hpp" вместо любого другого файла.

3 голосов
/ 01 декабря 2011

Ответ Яна Чарнаса правильный, но я бы сделал одну модификацию.

В этой статье есть более конкретное решение и объяснение того, почему вам нужно это сделать. http://aptogo.co.uk/2011/09/opencv-framework-for-ios/

// Добавить этот новый раздел ПЕРЕД инструкциями #import для UIKit и Foundation

#ifdef __cplusplus
    #import <opencv2/opencv.hpp>
#endif
2 голосов
/ 13 июня 2011

Даже если вы переименуете свой «main.m» в «main.mm» и переместите «#include opencv2 / opencv.hpp» в начало (в основной файл), препроцессор сначала вставит cocoa.h, потому что предварительно скомпилированных заголовочных файлов neme что-то вроде "_Prefix.pch". Чтобы избежать таких проблем - удалите оператор #import или - вставить оператор #import над оператором импорта cocoa.h

1 голос
/ 12 декабря 2013
  1. добавьте это в ваш файл .pch

    #ifdef __cplusplus
    #import <opencv2/opencv.hpp>
    #endif
    
  2. не забудьте конвертировать все ваши файлы .m в файлы .mm

1 голос
/ 28 сентября 2010

Попробуйте добавить: -lstdc++ к «другим флагам компоновщика» в настройках сборки для вашего приложения Cocoa.

Приложение какао, созданное с помощью шаблонов Xcode, не будет связывать, включает библиотеку c ++ в свои настройкипо умолчанию.

0 голосов
/ 28 сентября 2010

Вам, вероятно, будет проще использовать C API OpenCV, чем C++ API. Конечно, вы можете вызывать API C непосредственно из Objective C, так что это значительно облегчает жизнь. Вы просто теряете часть синтаксического сахара C ++, например значения параметров по умолчанию.

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