xubuntu中对boost :: program_options的未定义引用

时间:2016-09-20 09:57:41

标签: 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

我收到了这个

  

未定义的引用   `boost :: program_options :: options_description :: options_description(std :: __ cxx11 :: basic_string,std :: allocator&gt; const&amp;,unsigned int,   unsigned int)&#39;

我不知道它为什么失败,库就在那里,头文件也是。出了什么问题?我正在使用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

1 个答案:

答案 0 :(得分:7)

看起来boost是使用pre-C ++ 11 std::basic_string编译的,而你的代码是用C ++ 11 std::basic_string编译的。

尝试使用-D_GLIBCXX_USE_CXX11_ABI=0编译器命令行选项重新编译代码。有关详细信息,请参阅GCC5 and the C++11 ABI

  

在大多数情况下,由于链接器错误地抱怨涉及__cxx11的未解析符号,因此需要此标志时很明显。