буст ::программа _опции зависает на руке «иногда»

В настоящее время я использую boost::program_optionsдля разбора файла конфигурации на процессоре BeagleBoard (ARM -). Моя программа многопоточная -и связана с библиотеками boost 1.45 multithreaded.

Моя программа просто зависает при синтаксическом анализе файла конфигурации

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");
//Never gets here
std::cout<<"After adding options"<<std::endl; 
po::variables_map vm;
std::cout<<"Starting program"<<std::endl;

Программа зависает перед выводом «После добавления параметров». Если я запускаю программу через gdb, останавливаю ее и выполняю обратную трассировку, она просто показывает, что она была в строке до комментария «Никогда не попадет сюда». В верхней части трассировки это просто

#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

.... (дайте мне знать, если вы хотите больше)

есть идеи? Эта программа отлично работает на машине x86

Редактировать :Дополнительная информация, похоже, что этого не происходит при выключенной оптимизации (, скомпилированной с -O2, это будет происходить достаточно постоянно ).

Edit2 :Дальнейший анализ показывает, что это все еще происходит с отключенными оптимизациями, -O0.

8
задан Sam Miller 20 January 2013 в 15:44
поделиться