2010-09-28 5 views
6

Когда я создаю проект xCode с помощью шаблона C++ stdC++ «Command Line Tool», я могу включать и компилировать заголовки opencv и запускать некоторый код.Как включить OpenCV в приложение для какао?

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

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

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

Есть ли у вас идеи/знания?

ответ

1

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

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

+0

привет, я также добавил -lz, но все-таки получил ту же ошибку. Я строю на i386. Что мне не хватает? – Fabian

+0

Почему вы комментируете NSApplicationMain()? Вам нужно будет обновить свой вопрос с более конкретной информацией, например, точным сообщением об ошибке и/или достаточным фрагментом кода для подсказок к проблеме. – petert

0

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

18

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

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

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

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

+1

Даже если фактического Prefix.pch, настройки сборки цели могут содержать заголовок префикса, такой как UIKit.h системы для всего. После этого, наконец, он был построен на моей машине. –

2

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

3

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

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

// Добавить новый раздел перед операторами #import для UIKit и Фонда

#ifdef __cplusplus 
    #import <opencv2/opencv.hpp> 
#endif 
1
  1. добавить это к вашему.PCH файл

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

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