वर्तमान में मैं boost::program_options
उपयोग कर रहा हूँ BeagleBoard (एआरएम आधारित प्रोसेसर) पर एक विन्यास फ़ाइल को पार्स करने पर लटका हुआ है। मेरा कार्यक्रम बहु-थ्रेडेड है और boost 1.45 multithreaded
पुस्तकालयों के खिलाफ जुड़ा हुआ है।बढ़ावा :: program_options हाथ "कभी-कभी"
मेरे कार्यक्रम जब विन्यास फ़ाइल को पार्स हालांकि
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 के साथ होता है।
आप क्या पश्व-अनुरेखन प्रिंट # 2 के बाद दिखा सकते हैं? –
इसमें विकल्प नाम में जगह क्यों है? –
देखें कि कौन सा धागा ताला पकड़ रहा है, और देखें कि वह धागा वर्तमान में क्या कर रहा है। आपने कचरे के साथ अपने लॉक को ओवरराइट भी किया होगा और/या अनियंत्रित लॉक संरचना का उपयोग कर रहे हैं। – PlasmaHH