c++ - xubuntu 中对 boost::program_options 的 undefined reference

标签 c++ c++11 boost

我有这个文件

#include <boost/program_options.hpp>
namespace po = boost::program_options;

#include <iostream>
using namespace std;

int main(int ac, char* av[])
{
    try {

    po::options_description desc("Allowed options");
        desc.add_options()
            ("help", "produce help message")
        ;

    }
    catch(exception& e) {
        cerr << "error: " << e.what() << "\n";
        return 1;
    }
    catch(...) {
        cerr << "Exception of unknown type!\n";
    }

    return 0;
}

现在我正在尝试这样编译:

g++ -I /usr/include/boost/ -I /usr/include/boost/program_options main.cpp -L /usr/lib/x86_64-linux-gnu/ -lboost_program_options

我收到了这个

undefined reference to `boost::program_options::options_description::options_description(std::__cxx11::basic_string, std::allocator > const&, unsigned int, unsigned int)'

我不知道为什么会失败,库在那里,头文件也在那里。出了什么问题?我正在使用 boost 1.55.0

administrator@administrator-VirtualBox:~/l/b$ sudo updatedb
administrator@administrator-VirtualBox:~/l/b$ locate libboost_program_options
/usr/lib/x86_64-linux-gnu/libboost_program_options.a
/usr/lib/x86_64-linux-gnu/libboost_program_options.so
/usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.55.0

最佳答案

看起来 boost 是使用 C++11 之前的 std::basic_string 编译的,而您的代码是使用 C++11 std::basic_string 编译的。

尝试使用 -D_GLIBCXX_USE_CXX11_ABI=0 编译器命令行选项重新编译您的代码。参见 GCC5 and the C++11 ABI了解更多详情:

In most cases, it will be obvious when this flag is needed because of errors from the linker complaining about unresolved symbols involving __cxx11.

关于c++ - xubuntu 中对 boost::program_options 的 undefined reference ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39591067/

相关文章:

c++ - c++ 日志库异步捕获高吞吐量数据的可行性?

c++ - 为什么operator()的指针成员不起作用?

c++ - 在 C++11 中使用 auto foo = "bar"与 std::string

c++ - 在 C++ 中将通用构造函数分配给成员变量时的 std::move 或 std::forward

C++ 内存管理范例

c++ - 通过代理使用 C++/Boost 执行简单的 HTTP 请求?

c++ - 如何取回长整数的两个分量

c++ - 未找到 boost/lexical_cast.hpp

c++ - 使用 Boost 无法解析的外部符号

c++ 何时返回 const char* 而不是 std :string