boost程序选项抛出异常,multiple_occurrences和字符转换失败

时间:2019-01-23 12:08:10

标签: exception boost boost-program-options

奇怪的是,仅当我将代码构建为共享库并将其作为插件运行时,才会出现此问题。 我创建一个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> >'
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。

我不知道如何找到根本原因。来自异常的信息不是很有帮助。也许是链接/依赖性问题。

0 个答案:

没有答案