构建SFML和V8 我试图用SFML作为C++游戏引擎的图形主干。我也在使用V8 JavaScript引擎。问题是,要让V8编译,我必须使用-stdlib=libstdc++,要让SFML编译,我必须使用-stdlib=libc++。显然,我不能同时使用这两种方法,那么我如何解决这个问题呢

构建SFML和V8 我试图用SFML作为C++游戏引擎的图形主干。我也在使用V8 JavaScript引擎。问题是,要让V8编译,我必须使用-stdlib=libstdc++,要让SFML编译,我必须使用-stdlib=libc++。显然,我不能同时使用这两种方法,那么我如何解决这个问题呢,sfml,v8,libstdc++,libc++,build-error,Sfml,V8,Libstdc++,Libc++,Build Error,顺便说一句,我在MacMini上使用Xcode,但它也不能通过终端工作 使用-stdlib=libstdc++时,SFML会给我这些错误: Undefined symbols for architecture x86_64: "sf::String::String(char const*, std::locale const&)", referenced from: Undefined symbols for architecture x86_64: "std::_Rb_tre

顺便说一句,我在MacMini上使用Xcode,但它也不能通过终端工作

使用
-stdlib=libstdc++
时,SFML会给我这些错误:

Undefined symbols for architecture x86_64:
  "sf::String::String(char const*, std::locale const&)", referenced from:
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)
当使用
-stdlib=libc++
时,V8会给我这些错误:

Undefined symbols for architecture x86_64:
  "sf::String::String(char const*, std::locale const&)", referenced from:
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)
架构x86_64的未定义符号: “标准::_Rb_tree_decreation(标准::_Rb_tree_node_base*)”,引用自: std::_Rb_tree::_M_insert_unique(std::pair const&)在libv8_base.x64.a(allocation tracker.o)中 “标准::_Rb_tree_increment(标准::_Rb_tree_node_base*)”,引用自: libv8_base.x64.a(allocation tracker.o)中的v8::internal::AddressToTraceMap::RemoveRange(unsigned char*,unsigned char*)) libv8_base.x64.a(allocation tracker.o)中的v8::internal::AddressToTraceMap::Print() “std::_抛出_长度_错误(char const*)”,引用自: libv8_base.x64.a(默认平台.o)中的std::vector::_M_insert_aux(u gnu_cxx::u normal_迭代器,v8::internal::WorkerThread*const&) “标准::_Rb_tree_rebalance_for_erase(标准::_Rb_tree_node_base*,标准::_Rb_tree_node_base&)”,参考自: libv8_base.x64.a(allocation tracker.o)中的v8::internal::AddressToTraceMap::RemoveRange(unsigned char*,unsigned char*)) “标准::_Rb_tree_insert_and_rebalance(bool,标准::_Rb_tree_node_base*,标准::_Rb_tree_node_base*,标准::_Rb_tree_node_base&)”,参考自: std::_Rb_tree::_M_insert_unique(std::pair const&)在libv8_base.x64.a(allocation tracker.o)中
您需要使用相同的std库重新编译SFML和/或V8,因为它们不兼容。我不知道是否适用于V8,但SFML也应该能够与libstdc++一起工作(在生成makefile时,将
CMAKE_CXX_标志
CMAKE_C_标志
设置为
-stdlib=libstdc++
)。但是,您将无法在libstdc++中使用C++11特性