gpt4 book ai didi

c++ - Boost Program_Options 抛出 "character conversion failed"

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:33:54 26 4
gpt4 key购买 nike

我在 Ubuntu 14.04 上,使用 CMake 和 CLion。我正在尝试使用程序选项,以下代码取自其文档中的示例:

#include <iostream>
#include <boost/program_options.hpp>

int main(int ac, char* av[]) {
namespace po = boost::program_options;
using namespace std;

po::options_description desc("Allowed options");
desc.add_options()
("help", "produce help message")
("compression", po::value<int>(), "set compression level")
;

po::variables_map vm;
po::store(po::parse_command_line(ac, av, desc), vm);
po::notify(vm);

if (vm.count("help")) {
cout << desc << "\n";
return 1;
}

if (vm.count("compression")) {
cout << "Compression level was set to "
<< vm["compression"].as<int>() << ".\n";
} else {
cout << "Compression level was not set.\n";
}
}

当我运行它时,我从终端得到以下输出:

$ ./bin/webserver --help
terminate called after throwing an instance of 'boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<std::logic_error> >'
what(): character conversion failed
Aborted (core dumped)

为什么它不起作用,我该如何解决?

编辑: 经过一些调试,我发现问题出在 store 行,如果这对您有帮助的话。另外,我必须提到我尝试使用 store(..., true)(将 unicode 设置为 true)

最佳答案

1.58 转换到 1.61 时,我遇到了完全相同的问题。
我的问题是我将 1.61 boost header 代码与旧的 1.58 共享库链接起来。

您可能已经安装了较新版本的 boost,但这并不意味着您仍然没有与旧的 bo​​ost 库链接。检查你的链接器。检查您的系统文件。
你可以对你的程序做一个很好的检查,就是通过 gdb 运行它,让它崩溃,然后查看回溯 (bt)。它将在回溯中显示 boost 版本号。看看它是否符合您的预期。

您提到了 Ubuntu,这也是我正在使用的。我像这样从源代码构建了 boost:

sudo ./bootstrap.sh --prefix=/usr
sudo ./b2 install threading=multi link=shared

这导致我的库文件位于 /usr/lib/libboost*
但是,我的链接器正在查找 /usr/lib/x86_64-linux-gnu/libboost*

对旧文件进行简单的 cp -Pf 解决了我的问题。

关于c++ - Boost Program_Options 抛出 "character conversion failed",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35382902/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com