我很难让升级计划选项正常运作。我需要能够从终端窗口(Linux)启动我的程序,并带有一个带值的可选参数。无论我做了什么,这都行不通;无论我从终端输入什么值,它只返回默认值。此外,如果我没有在我的termina命令中包含该选项,则返回
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injec tor<std::logic_error> >'
what(): character conversion failed
Aborted (core dumped)
所以我在互联网上找到了一个最小的例子,看看它是不是我做错了。这是我发现的一个例子,我需要做类似的事情:
#include <iostream>
#include <boost/program_options.hpp>
namespace po = boost::program_options;
int main (int argc, char* argv[]) {
po::options_description desc("Usage");
desc.add_options()
("robots", po::value<int>()->default_value(3),
"How many robots do you want to send on a murderous rampage?");
po::variables_map opts;
po::store(po::parse_command_line(argc, argv, desc), opts);
try {
po::notify(opts);
}
catch (std::exception& e) {
std::cerr << "Error: " << e.what() << "\n";
return 1;
}
int nRobots = opts["robots"].as<int>();
// automatically assigns default when option not supplied by user!!
std::cout << nRobots << " robots have begun the silicon revolution"
<< std::endl;
return 0;
}
然而,这完全相同,我开始认为这是Boost中的一个错误(不太可能我猜)或者我不喜欢的系统?
有人可能会暗示可能出现的问题吗?感谢
答案 0 :(得分:0)
我遇到了从1.58
过渡到1.61
的完全相同的问题
我的问题是我将1.61
boost标头代码与旧的1.58
共享库相关联。
您可能已经安装了较新版本的boost,但这并不意味着您仍然没有使用旧的boost库进行链接。检查链接器。检查您的系统文件
你可以对你的程序做一个很好的检查,就是通过gdb
运行它,让它崩溃,然后查看回溯(bt)。它将显示回溯中的提升版本号。看看它是否符合你的预期。
如果相关,我在Ubuntu上并从源代码构建:
sudo ./bootstrap.sh --prefix=/usr
sudo ./b2 install threading=multi link=shared
这导致我的图书馆文件位于/usr/lib/libboost*
但是,我的链接器正在寻找/usr/lib/x86_64-linux-gnu/libboost*
。
旧文件的简单cp -Pf
解决了我的问题。