Quindi sto usando Xcode 6.1 sulla mia app Objective-C. La mia app utilizza il framework GameKit.Cambiare il tipo di file sorgente in Objective-C++ causa l'errore del linker quando si utilizza GameKit
Ho provato a chiamare i metodi esterni C++ dal mio GameViewController (che è Objective-C source.)
Per rendere GameViewController.mm compilare, ho dovuto impostare il tipo di 'Objective-C++ Source' manualmente.
Tuttavia, anche se la fonte ora compila, si sarà in grado di collegare con:
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)
posso solo sbarazzarsi delle errore di linker impostando il tipo di nuovo a 'Objective-C Source' e la rimozione le chiamate alle funzioni esterne del C++.
Perché il linker non funziona se la mia origine è compilata come "Origine Objective-C++" invece di "Origine Objective-C"?
Nota che collego correttamente GameKit nelle fasi Build.
non sono i file '' mm' compilati automaticamente come codice ObjC++? perché è necessario impostarlo manualmente? in ogni caso potrebbe essere necessario aggiungere un riferimento a GLKit –
Ricordare che * qualsiasi * classe che importa/include un'intestazione C++ direttamente o indirettamente (importando un'altra intestazione che importa un'intestazione C++) avrà bisogno dell'estensione .mm. Se inserisci le intestazioni C++ nel prefisso, tutti i file di origine devono essere .mm. – LearnCocos2D
Wow, strano questo - ho dovuto aggiungere manualmente il framework GLKit in Xcode 8.0 dopo aver cambiato da .m a .mm –