Also habe ich eine Engine für das iPhone entwickelt mit der ich ein paar verschiedene Spiele bauen möchte. Anstatt die Dateien für die Engine innerhalb des Projektverzeichnisses jedes Spiels zu kopieren und einzufügen, konnte ich von jedem Spiel aus eine Verbindung zur Engine herstellen. Wenn ich also eine Änderung vornehmen muss, muss ich das nur einmal tun. Nachdem Sie ein wenig herumgespielt haben, scheint es, als wären statische Bibliotheken der beste Weg, dies auf dem iPhone zu tun.Erstellen einer Objective-C++ statischen Bibliothek in Xcode
Ich habe ein neues Projekt namens Skeleton erstellt und alle meine Engine-Dateien kopiert. Ich habe this Guide verwendet, um eine statische Bibliothek zu erstellen, und ich importierte die Bibliothek in ein Projekt namens Chooser. Als ich jedoch versuchte, das Projekt zu kompilieren, begann Xcode sich über einige C++ - Datenstrukturen zu beschweren, die ich in eine Datei namens ControlScene.mm einfügte. Hier ist mein Buildfehler:
"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
Wenn jemand einen Einblick bieten könnte, warum diese Probleme auftreten, würde ich es zu schätzen wissen.
Wo befinden sich diese? – LandonSchropp
@helixed, wenn Sie die Bibliothek mit einem Makefile oder von der Kommandozeile aus erstellen, können Sie diese zu Ihrem Aufruf von g ++ hinzufügen. Wenn Sie Xcode verwenden, glaube ich, dass es in Ihren Projekt-Build-Einstellungen so etwas wie "andere Flags" gibt, wo Sie diese eingeben können. –
Yup, hat perfekt funktioniert. Der richtige Ort, um es zu setzen, sind andere Linker Flags, falls jemand sich fragen sollte. Danke für die Hilfe. – LandonSchropp