0

I am trying to compile tokumx (mongodb fork with transactions) on mavericks. It compiles for some time and then errors out with this message:

Linking build/darwin/64/release/mongo/mongodump
Undefined symbols for architecture x86_64:
  "std::tr1::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >::operator()(std::basic_string<char, std::char_traits<char>, std::allocator<char> >) const", referenced from:
      std::tr1::_Hashtable<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, std::equal_to<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true>::find(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const in configuration_variable_manager.o
      std::tr1::_Hashtable<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, std::equal_to<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true>::_M_rehash(unsigned long) in configuration_variable_manager.o
      std::tr1::__detail::_Map_base<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, true, std::tr1::_Hashtable<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> >, std::allocator<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, std::_Select1st<std::pair<std::basic_string<char, std::char_traits<char>, std::allocator<char> > const, boost::function<mongo::Status (std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)> > >, std::equal_to<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::hash<std::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::tr1::__detail::_Mod_range_hashing, std::tr1::__detail::_Default_ranged_hash, std::tr1::__detail::_Prime_rehash_policy, false, false, true> >::operator[](std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) in configuration_variable_manager.o
      mongo::InitializerDependencyGraph::addInitializer(std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, boost::function<mongo::Status (mongo::InitializerContext*)> const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<std::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) in initializer_dependency_graph.o


"std::__detail::_List_node_base::_M_unhook()", referenced from:
      mongo::DistributedLockPinger::_distLockPingThread(mongo::ConnectionString, std::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned long long) in distlock.o
      std::list<mongo::FieldRangeSetPair, std::allocator<mongo::FieldRangeSetPair> >::_M_erase(std::_List_iterator<mongo::FieldRangeSetPair>) [clone .isra.535] in queryutil.o
      mongo::OrRangeGenerator::_popOrClause(mongo::FieldRangeSet const*, mongo::Collection*, int, mongo::BSONObj const&) in queryutil.o
      mongo::OrRangeGenerator::popOrClauseSingleKey()      in queryutil.o
      mongo::threadpool::ThreadPool::task_done(mongo::threadpool::Worker*) in thread_pool.o
      mongo::threadpool::ThreadPool::~ThreadPool() in thread_pool.o
      mongo::threadpool::ThreadPool::~ThreadPool() in thread_pool.o
      ...
ld: symbol(s) not found for architecture x86_64

Anyone knows exactly whats going on there?

Stennie
  • 63,885
  • 14
  • 149
  • 175
Iuri G.
  • 10,460
  • 4
  • 22
  • 39

1 Answers1

2

This is caused by a mismatch between the standard library headers and library version, it's similar to this report http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43882.

OSX compilation isn't strictly supported for TokuMX yet, but I've been working on it recently. Make sure you have the latest Xcode and command line tools installed, and try compiling again with --cc=cc --cxx="c++ -std=c++11 -stdlib=libc++" as arguments to scons.

If that doesn't work, please also provide the command you used to try to build, and all of the preceding output, this would be a question better suited to the mailing list I think.

leif
  • 1,987
  • 4
  • 19
  • 22
  • im using apple's llvm compile 5.0. I am getting following error: `src/mongo/scripting/v8_profiler.cpp:23:26: error: no member named 'StartProfiling' in 'v8::CpuProfiler'; did you mean 'StartCpuProfiling'? v8::CpuProfiler::StartProfiling(v8::String::New(name.toString().c_str())); ` when i compile using `/opt/local/bin/scons -j8 --cc=cc --cxx="c++ -std=c++11 -stdlib=libc++" --release dist`. I also used mp-gcc47 macports compiler. Got to linking but then ld complained that -rdynamic was not a valid option and once i removed rdynamic it started complaining on tr1 includes... – Iuri G. Dec 30 '13 at 15:28
  • I have never seen that error about StartProfiling. The clang compiler is definitely the only one we would support on macs. Right now we aren't really supporting mac builds, but we're working towards it slowly. If you send us an email I can get you in our system and notify you when we have something you can play with. – leif Dec 31 '13 at 20:21
  • I can compile with latest commits to master branch on mavericks. Thanks. – Iuri G. Jan 09 '14 at 16:58