Also verwende ich Xcode 6.1 auf meiner Objective-C App. Meine App verwendet das GameKit-Framework.Das Ändern des Quelldateityps in Objective-C++ führt zu einem Linkerfehler bei der Verwendung von GameKit
habe ich versucht, externe C++ Methoden aus meinen GameViewController zu nennen (die Objective-C-Quelle ist.)
GameViewController.mm kompiliert zu machen, ich die Art zu 'Objective-C++ Source' manuell eingestellt werden musste.
Doch obwohl die Quelle kompiliert jetzt, wird es nicht mit verknüpfen:
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)
Ich kann nur von den Linker Fehler loszuwerden, indem die Art zurück zu ‚Objective-C Source‘ Setzen und Entfernen die Aufrufe an die externen C++ Funktionen.
Warum schlägt der Linker fehl, wenn meine Quelle als 'Objective-C++ Source' und nicht als 'Objective-C Source' Typ kompiliert wird?
Beachten Sie, dass ich in den Build-Phasen ordnungsgemäß gegen GameKit verlinke.
werden '.mm' Dateien nicht automatisch als ObjC++ - Code kompiliert? Warum müssen Sie es manuell einstellen? In jedem Fall müssen Sie einen Verweis auf GLKit hinzufügen. –
Beachten Sie, dass * jede * Klasse, die einen C++ - Header entweder direkt oder indirekt importiert/importiert (einen anderen Header importiert, der einen C++ - Header importiert) die Erweiterung .mm benötigt. Wenn Sie die C++ - Header in das Präfix einfügen, müssen alle Quelldateien .mm sein. – LearnCocos2D
Wow, seltsam, das - ich musste manuell das GLKit-Framework in Xcode 8.0 nach dem Wechsel von .m zu .mm –