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

问题描述 投票:22回答:5

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

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

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

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

我需要改变什么?

c++ boost g++ ubuntu-12.04
5个回答
27
投票

如果你已经从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})

4
投票

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


2
投票

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

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


0
投票

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

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


0
投票

这些库通常安装在/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以获取相应的库。

© www.soinside.com 2019 - 2024. All rights reserved.