Xcode 7 и openCV (нет Swift): заголовок Core.hpp должен быть скомпилирован как С++
Я следил за инструкциями о том, как установить OpenCV в проекте iOS. Однако при использовании Xcode 7 мне пришлось вручную добавить заголовок префикса. Выполнение этого, к сожалению, не помогло, и я все еще получал ошибки компиляции. Затем я прочитал другое сообщение, в котором говорится, что лучше всего добавлять вручную импорт, а не использовать заголовки префикса в Xcode 7, поэтому я сделал.
Вот мой код:
#import "ViewController.h"
#import <opencv2/opencv.hpp>
#import <UIKit/UIKit.h>
#import <Foundation/Foundation.h>
#import <opencv2/highgui/cap_ios.h>
//using namespace cv;
@interface ViewController ()
{
IBOutlet UIImageView* imageView;
IBOutlet UIButton* button;
}
- (IBAction)actionStart:(id)sender;
@end
Однако я все еще получаю следующие ошибки.
![введите описание изображения здесь]()
Когда я раскомментирую использование пространства имен cv; Я получаю следующее:
![введите описание изображения здесь]()
Я нашел несколько сложных решений, говорящих об экспонировании заголовков в Swift и т.д. Я просто хочу, чтобы мой проект работал на Objective-C с Xcode 7...
Ответы
Ответ 1
OpenCV представляет собой структуру C++
, что означает, что любой код, который использует OpenCV, должен быть скомпилирован с интерпретацией C++
, а не интерпретацией C
.
Ошибки, которые вы видите, например. с using namespace cv;
указывают, что код скомпилирован с использованием компилятора objective-C, а не компилятора objective-C ++.
Как я уже упоминал в своем комментарии, самый простой способ добиться этого - убедиться, что любой файл, который #include
заголовок opencv должен быть назван, например. ViewController.mm
, т.е. должен быть файл objective-C ++.
В качестве альтернативы вы можете выбрать и переопределить Type
файла, явно выбрав параметр Objective-C++ Source
для типа файла в панели утилит.
![раскрывающийся список панели утилит]()
Ответ 2
У меня была точно такая же проблема. Я работаю над проектом Swift с OpenCV.
Что касается Swift, его точкой входа в OpenCV является файл, который я называл OpenCVWrapper. Поэтому я получил OpenCVWrapper.h и OpenCVWrapper.mm. В заголовочном заголовке моего проекта я получил #import "OpenCVWrapper.h".
Я хочу написать класс под названием MatUtils в Objective-C ++, который я мог бы вызвать из OpenCVWrapper.mm. Чтобы их можно было увидеть там, мне пришлось поместить их в MatUtils.h.
Короче говоря, ошибка в том, что в OpenCVWrapper.h я сделал #import "MatUtils.h". ОШИБКИ!!!! Поскольку OpenCVWrapper находится в заголовочном заголовке, С++ теперь доступен из Swift!
Быстрое исправление: #import "MatUtils.h" в OpenCVWrapper.mm!
Ура!
BRO
Ответ 3
Попробуйте поместить #import < opencv2/opencv.hpp >
перед #import "ViewController.h"
. Источник