Używam Xcode 6.1 w mojej aplikacji Objective-C. Moja aplikacja wykorzystuje framework GameKit.Zmiana źródłowego typu pliku na Objective-C++ powoduje błąd linkera podczas korzystania z GameKit
Próbowałem zadzwonić zewnętrznych metod C++ z mojego GameViewController (co jest Objective-C source.)
Aby GameViewController.mm kompilacji, musiałem ustawić typ do 'Cel-C++ Źródło' ręcznie.
Jednak, mimo że źródło kompiluje teraz, nie będzie można połączyć z:
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)
mogę pozbyć tylko błędu łącznikowej poprzez ustawienie rodzaju powrotem do „Objective-C Źródło” i usunięcie wywołania do zewnętrznych funkcji C++.
Dlaczego linker się nie powiódł, jeśli moje źródło zostało skompilowane jako "Źródło Objective-C++" zamiast typu "Objective-C Source"?
Zwróć uwagę, że prawidłowo łączę się z GameKit w fazie kompilacji.
nie jest plikami '.mm' automatycznie kompilowanymi jako kod ObjC++? dlaczego musisz ustawić to ręcznie? w każdym razie możesz potrzebować dodać odniesienie do GLKit –
Należy pamiętać, że * dowolna * klasa, która importuje/zawiera nagłówek C++ bezpośrednio lub pośrednio (importując inny nagłówek, który importuje nagłówek C++) będzie potrzebować rozszerzenia .mm. Jeśli umieścisz nagłówki C++ w przedrostku, wszystkie pliki źródłowe muszą mieć wartość .mm. – LearnCocos2D
Wow, to dziwne - musiałem ręcznie dodać framework GLKit w Xcode 8.0 po zmianie z .m na .mm –