Сборка 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++.

Другие вопросы по тегам