Сборка SFML и V8
Я пытаюсь использовать SFML в качестве моей графической основы для игрового движка C++. Я также использую движок V8 JavaScript. Проблема в том, чтобы получить V8 для компиляции, я должен использовать -stdlib=libstdc++
и чтобы получить SFML для компиляции, я должен использовать -stdlib=libc++
, Очевидно, я не могу использовать оба, так как я могу обойти это?
Кстати, я использую Xcode на Mac Mini, но через терминал он тоже не работает.
SFML дает мне эти ошибки при использовании -stdlib=libstdc++
:
Undefined symbols for architecture x86_64:
"sf::String::String(char const*, std::locale const&)", referenced from:
И V8 дает мне эти ошибки при использовании -stdlib=libc++
:
Undefined symbols for architecture x86_64:
"std::_Rb_tree_decrement(std::_Rb_tree_node_base*)", referenced from:
std::_Rb_tree<unsigned char*, std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack>, std::_Select1st<std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack> >, std::less<unsigned char*>, std::allocator<std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack> > >::_M_insert_unique(std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack> const&) in libv8_base.x64.a(allocation-tracker.o)
"std::_Rb_tree_increment(std::_Rb_tree_node_base*)", referenced from:
v8::internal::AddressToTraceMap::RemoveRange(unsigned char*, unsigned char*) in libv8_base.x64.a(allocation-tracker.o)
v8::internal::AddressToTraceMap::Print() in libv8_base.x64.a(allocation-tracker.o)
"std::__throw_length_error(char const*)", referenced from:
std::vector<v8::internal::WorkerThread*, std::allocator<v8::internal::WorkerThread*> >::_M_insert_aux(__gnu_cxx::__normal_iterator<v8::internal::WorkerThread**, std::vector<v8::internal::WorkerThread*, std::allocator<v8::internal::WorkerThread*> > >, v8::internal::WorkerThread* const&) in libv8_base.x64.a(default-platform.o)
"std::_Rb_tree_rebalance_for_erase(std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
v8::internal::AddressToTraceMap::RemoveRange(unsigned char*, unsigned char*) in libv8_base.x64.a(allocation-tracker.o)
"std::_Rb_tree_insert_and_rebalance(bool, std::_Rb_tree_node_base*, std::_Rb_tree_node_base*, std::_Rb_tree_node_base&)", referenced from:
std::_Rb_tree<unsigned char*, std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack>, std::_Select1st<std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack> >, std::less<unsigned char*>, std::allocator<std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack> > >::_M_insert_unique(std::pair<unsigned char* const, v8::internal::AddressToTraceMap::RangeStack> const&) in libv8_base.x64.a(allocation-tracker.o)
1 ответ
Вам необходимо перекомпилировать SFML и / или V8 с одной и той же стандартной библиотекой, так как они несовместимы. Я не знаю, для V8, но SFML должен быть в состоянии работать с libstdC++ (установить CMAKE_CXX_FLAGS
а также CMAKE_C_FLAGS
в -stdlib=libstdc++
при создании make-файла). Однако вы не сможете использовать функции C++11 с libstdC++.