Поэтому я использую Xcode 6.1 в своем приложении Objective-C.
Мое приложение использует каркас GameKit.
Я пытался вызвать внешние методы C ++ из моего GameViewController (который является источником Objective-C.)
Чтобы компилировать GameViewController.mm, мне пришлось вручную установить тип «Objective-C ++ Source».
Однако, хотя исходный код теперь компилируется, он не сможет связать с:
Undefined symbols for architecture x86_64:
"_OBJC_CLASS_$_GLKViewController", referenced from:
_OBJC_CLASS_$_GameViewController in GameViewController.o
"_OBJC_METACLASS_$_GLKViewController", referenced from:
_OBJC_METACLASS_$_GameViewController in GameViewController.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
Я могу избавиться только от ошибки компоновщика, установив тип обратно в ‘Objective-C Source’ и удалив вызовы внешних функций C ++.
Почему компоновщик не работает, если мой источник скомпилирован как «Objective-C ++ Source» вместо типа «Objective-C Source»?
Обратите внимание, что я правильно ссылаюсь на GameKit на этапах сборки.
ХОРОШО.
Оказывается странным, но:
Я связывался с GameKit, а не с GLKit.
Исправление: ссылка на GLKit.
Теперь странная часть заключается в том, что отсутствие связи с GLKit не вызывает проблем, если контроллер представления построен как источник Objective-C. Это создает проблемы, если оно построено как источник Objective-C ++.
Удивительно, но факт.