未定义的引用`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::timer::auto_cpu_timer 的未定义引用
使用简单 Ls.cpp 的 C++ Boost 编译错误 - 未定义对 boost::filesystem::path::filename 的引用