奇怪的是,仅当我将代码构建为共享库并将其作为插件运行时,才会出现此问题。 我创建一个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。
我不知道如何找到根本原因。来自异常的信息不是很有帮助。也许是链接/依赖性问题。