2015-03-17 2 views
-2

Я начинаю с Xcode ... Я пытаюсь использовать openCV C++ с Scenekit =>, чтобы создать сцену AR. Ну, я был слишком оптимистичен.Xcode: Невозможно использовать C++ с Scenekit?

1/Я начал использовать шаблон XCode по умолчанию для игры. => Работает!

2/OpenCV без scenekit => работает

3/смешивания ...

Я импортировал некоторые C++ заголовки в файле gameviewController (в основном UIViewController с scenekit внутри).

Если я так дам, я получаю ошибку компилятора (cstddef не определено). Достаточно справедливо, это C++, поэтому, из того, что я читал, мне просто нужно переименовать .m в .mm Но в этом случае я получаю полный список ошибок компоновщика, таких как Undefined символы для архитектуры arm64: "_OBJC_CLASS _ $ _ SCNAction », на который ссылаются:

=> Я думаю, что сложнее смешивать объективные C и C++, но в более простом проекте, без Scenekit, но с очень похожим кодом, в противном случае он работал красиво.

Любой ключ или руководство по их смешиванию? Должен ли я использовать быстро?

Спасибо большое,

Майкл

+0

Интеграция Objective-C и C++ не является тривиальным, так что это на самом деле не то, что можно ответить здесь. Вы хоть понимаете проблемы? – trojanfoe

+0

Я нахожусь на последнем XCode (обновлен вчера) –

+2

Тогда я возьму это как «нет». – trojanfoe

ответ

1

Такая же проблема здесь. У меня был чистый класс Objective-C, просто названный «GameViewController.m». Чтобы превратить его в класс Obj-C++, измените «.m» на «.mm».

Однако, просто изменив расширение, компоновщик плюнул назад 13 неопределенные символы ....

"_OBJC_CLASS_$_SCNTransaction", referenced from: ... 
    "_OBJC_CLASS_$_SCNFloor", referenced from: ... 
    "_OBJC_CLASS_$_SCNMaterial", referenced from: ... 
etc... 

Чтобы обойти это, просто создать другой (новый) класс Obj-C++, с. мм, и поместите свой код на C++ в этот класс. Теперь вы можете создать экземпляр этого нового класса из класса, содержащего вызовы SceneKit, и вызвать методы в новом классе Obj-C++.

Внутри класса GameViewcontroller.m:

... 
scene = [SCNScene sceneNamed:@"art.scnassets/grid.dae"]; 
kinematics = [[KinematicScene alloc] init]; 
[kinematics setupCharacters]; 
... 

А внутри класса новый Obj-C++ (KinematicsScene.mm)

@implementation KinematicScene 
{ 
    AI::Location *location; 
} 

-(id) init 
{ 
    self = [super init]; 
    if(self) 
    { 
     AI::KinematicSeek* seek = new AI::KinematicSeek[2]; 

     location = new AI::Location[2]; 
    } 
    return self; 
} 

-(void) setupCharacters 
{ 
    ..... 
} 

... etc .... 

@end 
0

Это работает для меня:

  1. Отключить поддержку модуля [CLANG_ENABLE_MODULES, -fmodules]. Это имеет недостатки в работе пользователей. Прочитайте интерактивную справку для этого параметра, прежде чем отключать его, а также помните, что если вы отключите его, вы станете ответственным за поиск библиотек и фреймворков, с которыми вам нужно связать, и это может быть утомительным, если вы не старая рука.

  2. Постройте и (попытайтесь) ссылку. Добавьте фреймворки и библиотеки, необходимые для устранения ошибок ссылок. Я рекомендую создать группу в вашем проекте и направлять ее на ваш SDK, а затем добавить фреймворки и библиотеки относительно этого SDK.

2

мне просто нужно добавить «SceneKit.framework» в Link Binary With Libraries: Link Binary wit

+0

СПАСИБО !!! Я трачу часы, пытаясь справиться с этим, получается, что учебник пропустил это! –

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