J'ai donc développé un moteur pour l'iPhone avec lequel j'aimerais construire quelques jeux différents. Plutôt que de copier et coller les fichiers du moteur à l'intérieur du répertoire de projet de chaque jeu, j'aurais un moyen de lier le moteur à chaque jeu, donc si je dois y apporter une modification, je ne dois le faire qu'une seule fois. Après avoir un peu ralenti, il semble que les bibliothèques statiques soient la meilleure façon de le faire sur l'iPhone.Création d'une bibliothèque statique Objective-C++ dans Xcode
J'ai créé un nouveau projet appelé Skeleton et copié tous les fichiers de mon moteur. J'ai utilisé le guide this pour créer une bibliothèque statique, et j'ai importé la bibliothèque dans un projet appelé Chooser. Cependant, lorsque j'ai essayé de compiler le projet, Xcode a commencé à se plaindre de certaines structures de données C++ que j'avais incluses dans un fichier appelé ControlScene.mm. Voici mes erreurs de construction:
"operator delete(void*)", referenced from:
-[ControlScene dealloc] in libSkeleton.a(ControlScene.o)
-[ControlScene init] in libSkeleton.a(ControlScene.o)
__gnu_cxx::new_allocator<operation_t>::deallocate(operation_t*, unsigned long)in libSkeleton.a(ControlScene.o)
__gnu_cxx::new_allocator<operation_t*>::deallocate(operation_t**, unsigned long)in libSkeleton.a(ControlScene.o)
"operator new(unsigned long)", referenced from:
-[ControlScene init] in libSkeleton.a(ControlScene.o)
__gnu_cxx::new_allocator<operation_t*>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)
__gnu_cxx::new_allocator<operation_t>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)
"std::__throw_bad_alloc()", referenced from:
__gnu_cxx::new_allocator<operation_t*>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)
__gnu_cxx::new_allocator<operation_t>::allocate(unsigned long, void const*)in libSkeleton.a(ControlScene.o)
"___cxa_rethrow", referenced from:
std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_create_nodes(operation_t**, operation_t**)in libSkeleton.a(ControlScene.o)
std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_initialize_map(unsigned long)in libSkeleton.a(ControlScene.o)
"___cxa_end_catch", referenced from:
std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_create_nodes(operation_t**, operation_t**)in libSkeleton.a(ControlScene.o)
std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_initialize_map(unsigned long)in libSkeleton.a(ControlScene.o)
"___gxx_personality_v0", referenced from:
___gxx_personality_v0$non_lazy_ptr in libSkeleton.a(ControlScene.o)
___gxx_personality_v0$non_lazy_ptr in libSkeleton.a(MenuLayer.o)
"___cxa_begin_catch", referenced from:
std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_create_nodes(operation_t**, operation_t**)in libSkeleton.a(ControlScene.o)
std::_Deque_base<operation_t, std::allocator<operation_t> >::_M_initialize_map(unsigned long)in libSkeleton.a(ControlScene.o)
ld: symbol(s) not found
collect2: ld returned 1 exit status
Si quelqu'un pourrait offrir un aperçu des raisons pour lesquelles ces problèmes sont INTERVENUES, je vous en serais reconnaissant.
Où sont situés ces? – LandonSchropp
@helixed, si vous construisez la bibliothèque avec un Makefile ou depuis la ligne de commande, vous pouvez les ajouter à votre invocation de g ++. Si vous utilisez Xcode, je crois qu'il y a quelque chose comme "autres drapeaux" dans les paramètres de construction de votre projet où vous pouvez les entrer. –
Yup, a parfaitement fonctionné. Le bon endroit pour le mettre est d'autres drapeaux de liaison au cas où quelqu'un se demandait. Merci pour l'aide. – LandonSchropp