I am currently using boost::program_options to parse a configuration file on a BeagleBoard (ARM processor). My program is multithreaded and linked to boost 1.45 multithreaded libraries.
My program just hangs while parsing the configuration file, though
namespace po = boost::program_options; po::options_description desc("Options"); uint32_t option1=0; std::vector<std::string> optionsString; std::cout<<"Before adding options"<<std::endl; desc.add_options() ("option1", po::value<uint32_t>(&option1), "...") ("finaloption", po::value<std::vector<std::string> >(&optionsString)->multitoken(), "string of options");
The program freezes before printing "After adding parameters." If I run the program through gdb, stop it and trace back, it will just show that it was on the line before the comment "Never comes here." Top backtrace just has it in
#0 ?? #1 __lll_lock_wait lowlevellock.c:47 #2 __pthread_mutex_lock pthread_mutex_lock.c:61 #3 in boost::shared_ptr<boost::program_options::option_description>* std::__uninitialized_move_a<boost::shared_ptr<boost::program_options::option_description>*, boost::shared_ptr<boost::program_options::option_description>*, std::allocator<boost::shared_ptr<boost::program_option::option_description> > >(boost::shared_ptr<boost::program_optionns::option_description>*, boost::shared_ptr<boost::program_options::option_description>*, std::allocator<boost::shared_ptr<boost::program_options::option_description> >&) () from /usr/local/lib/libboost_program_options-mt.so.1.45.0 #4 in std::vector<boost::shared_ptr<boost::program_options::option_description>, std::allocator<boost::shared_ptr<boost::program_options::option_description> > >::_M_insert_aux(__gnu_cxx::__normal_iterator<boost::shared_ptr<boost::program_options::option_description>, std::vector<boost::shared_ptr<boost::program_options::option_description>, std::allocator<boost::shared_ptr<boost::program_options::option_description> const&)() from /usr/local/lib/libboost_program_options-mt.so.1.45.0 #5 in boost::program_options::options_description::add(boost::shared_ptr<boost::program_options::option_description>) () from /usr/local/lib/libboost_program_options-mt.so.1.45.0
... (let me know if you want more)
Any thoughts? This program works fine on an x86 machine.
Edit: additional information, it seems this does not happen with optimization disabled (compiled with -O2, this will be pretty consistent).
Edit2: Further analysis shows that this still happens when optimization is disabled, -O0.
c ++ boost arm boost-program-options
Adam A.
source share