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

时间:2012-08-29 13:31:47

标签: c++ boost g++ ubuntu-12.04

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

  

boost::program_options::options_description::m_default_line_length

的未定义引用

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

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

我需要改变什么?

5 个答案:

答案 0 :(得分: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})

答案 1 :(得分:4)

C ++ 11标准中的<string>类发生了变化,可能与使用非C ++ 11编译器(如G ++ - 4.8)编译的Boost库版本冲突。尝试重新编译boost或使用用于编译Boost库的C ++编译器版本。

答案 2 :(得分:2)

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

有关详细信息,请参阅Dual ABI

答案 3 :(得分:0)

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

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

答案 4 :(得分: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以获取相应的库。