28

我正在尝试编译代码,但出现错误

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

我在 Ubuntu 12.04 中使用 g++。虽然我做过一些 C++ 编程,但我对 Linux 开发环境还是新手(以前只使用过 IDE)。

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

我需要改变什么?

4

5 回答 5

36

如果你已经从 repo 安装了 boost,那么使用它就-lboost_program_options足够了。
如果您在其他库中安装了 boost 库,则需要通过以下方式指定该目录-L/path/to/lib

在 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})
于 2012-08-29T13:39:26.143 回答
4

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

于 2016-09-22T01:02:42.650 回答
3

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

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

于 2018-01-04T16:42:36.867 回答
1

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

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

于 2012-08-29T13:35:31.197 回答
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以获取相应的库。

于 2016-03-16T13:28:26.120 回答