未定义的引用`boost :: program_options :: options_description :: m_default_line_length'

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了未定义的引用`boost :: program_options :: options_description :: m_default_line_length'相关的知识,希望对你有一定的参考价值。

我正在尝试编译代码,我得到错误

未定义引用boost::program_options::options_description::m_default_line_length

我在Ubuntu 12.04中使用g ++。虽然我已经完成了一些C ++编程,但我还不熟悉Linux开发环境(之前只使用过IDE)。

所以我对这个问题做了基本的搜索,发现了一些链接问题。因为我是新手,所以我不太了解他们。阅读其中一些解决方案让我更加困惑。我的boost库文件夹位于/usr/include中。一些解决方案说它应该在/usr/lib。但我没有任何提升文件夹。

我需要改变什么?

答案

如果你已经从repo安装了boost,那么只需使用足够的-lboost_program_options。 如果您在其他库中安装了boost库,则需要通过-L/path/to/lib指定directoty

在CMake中,您可以指定set(CMAKE_CXX_FLAGS "-lboost_program_options")

但是使用CMake你应该使用

FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(target ${Boost_LIBRARIES})
另一答案

在C ++ 11标准中对<string>类进行了更改,这可能与使用非C ++ 11编译器(例如G ++ - 4.8)编译的Boost库版本冲突。尝试重新编译boost或使用用于编译Boost库的C ++编译器版本。

另一答案

还要仔细检查预处理器变量_GLIBCXX_USE_CXX11_ABI的设置是否与用​​于编译boost的变量的设置相同。根据所使用的Linux发行版和GNU编译器版本,变量的默认设置可能会有所不同。

有关更多信息,请参阅Dual ABI

另一答案

boost库(以.so和.a结尾的文件)在哪里?找到这些,然后将其添加到您的链接命令:-L / path / to / boost / libs -lname-of-boost-lib

这必须是人们在首次启动c ++时遇到的最常见问题。 SO上可能还有其他一千个未定义的参考问题。只搜索未定义的引用。

另一答案

这些库通常安装在/usr/lib中(例如在我的系统上,/usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.58.0)。

为了编译要与这些库链接的代码,通常使用/usr/include中提供的头文件。

与许多库不同,Boost没有附带pkg-config文件,因此您需要自己添加链接器标志。使用通常的Makefile规则,你需要像LDLIBS += -lboost_program_options这样的东西。

另请注意,尽管libboost-dev包提供了program_options的标头,但您还需要安装libboost-program-options-dev以获取相应的库。

以上是关于未定义的引用`boost :: program_options :: options_description :: m_default_line_length'的主要内容,如果未能解决你的问题,请参考以下文章

未定义对“boost::archive ...”的引用 g++ / wsl

C ++ BOOST对`boost :: filesystem :: detail :: copy_file的未定义引用

对 boost asio 的未定义引用

对 boost::timer::auto_cpu_timer 的未定义引用

使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用

Travis CI 上的 Boost 中对 `std::__cxx11::basic_string 的未定义引用