Странно то, что эта проблема возникает только тогда, когда я создаю код как разделяемую библиотеку и запускаю его как плагин.
Я создаю объект options_description и вызываю add_options ().
Когда я вызываю store (), он вылетает, выдает исключение, которое я не могу поймать, и завершается.
Код:
try
{
//po::options_description desc("Allowed options");
m_desc->add_options()
("help,h", "Print a help message then exit")
("blub,b", po::value<int>()->default_value(0), "blub");
po::variables_map vm;
po::store(po::parse_command_line(argc, argv, *m_desc), vm);
}
catch (const std::exception& e)
{
std::cerr << "Exception: " << e.what() << std::endl;
std::cerr << "Details: " << boost::diagnostic_information(e) <<
std::endl;
}
catch (const boost::exception& e)
{
std::cerr << "Boost Exception: " <<
boost::diagnostic_information(e) << std::endl;;
}
catch(...)
{
std::cerr << "Unhandled Exception: " <<
boost::current_exception_diagnostic_information() << std::endl;
}
исключение 1 :
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<
boost::exception_detail::error_info_injector<
boost::program_options::multiple_occurrences> >'<br>
what(): option cannot be specified more than once
Когда я оборачиваю options_description в общий указатель, он падает, выдает другое исключение и не завершается.
исключение 2 :
Exception: character conversion failed
Details: Throw location unknown (consider using BOOST_THROW_EXCEPTION)
Dynamic exception type: boost::exception_detail::clone_impl<
boost::exception_detail::error_info_injector<std::logic_error> >
std::exception::what: character conversion failed
Я использую boost 1.54, но у меня та же проблема с 1.58.
Моя ОС - OpenSuse Leap 42.1, GCC 4.8.5.
Я не знаю, как найти причину. Информация из исключений не очень полезна. Может быть, это проблема с ссылками / зависимостями.