C++ 对“boost::program\u options::options\u description::m_default\u line\u length';

C++ 对“boost::program\u options::options\u description::m_default\u line\u length';,c++,boost,g++,ubuntu-12.04,C++,Boost,G++,Ubuntu 12.04,我试图编译一段代码,但我得到了错误 对boost::program\u options::options\u description::m\u default\u line\u length的未定义引用 我在Ubuntu 12.04中使用g++。虽然我已经做了一些C++编程,但是我对Linux开发环境很陌生(以前只使用IDE)。 所以我对这个问题做了一个基本的搜索,发现了一些链接问题。我不是很了解他们,因为我是个新手。阅读其中一些解决方案让我更加困惑。我的boost库文件夹位于/usr/incl

我试图编译一段代码,但我得到了错误

boost::program\u options::options\u description::m\u default\u line\u length的未定义引用

我在Ubuntu 12.04中使用g++。虽然我已经做了一些C++编程,但是我对Linux开发环境很陌生(以前只使用IDE)。 所以我对这个问题做了一个基本的搜索,发现了一些链接问题。我不是很了解他们,因为我是个新手。阅读其中一些解决方案让我更加困惑。我的boost库文件夹位于
/usr/include
中。一些解决方案说它应该在
/usr/lib
中。但是我没有任何boost文件夹


我需要更改什么?

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


<>这是第一次启动C++时面临的最常见问题。可能还有上千个未定义的参考问题。只需搜索未定义的引用。

如果您已经安装了来自repo的boost,只需使用
-lboost\u program\u选项即可。
如果在其他库中安装了boost库,则需要通过
-L/path/to/lib

在CMake中,您可以指定
set(CMake\u CXX\u标志“-lboost\u程序选项”)

但是,对于CMake,您应该使用

FIND_PACKAGE(Boost COMPONENTS program_options REQUIRED)
INCLUDE_DIRECTORIES(${Boost_INCLUDE_DIRS})
TARGET_LINK_LIBRARIES(target ${Boost_LIBRARIES})

这些库通常安装在
/usr/lib
中(例如,在我的系统上,
/usr/lib/x86\u 64-linux-gnu/libboost\u程序选项。so.1.58.0

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

与许多库不同,Boost不附带pkg配置文件,因此您需要自己添加链接器标志。使用通常的Makefile规则,您需要类似于
LDLIBS+=-lboost\u program\u选项的东西


还要注意的是,尽管
libboost-dev
包提供了
program\u选项的标题
,您还需要安装
libboost程序选项dev
,以获取相应的库。

C++11标准中的
类发生了更改,这可能与使用非C++11编译器(如G++-4.8)编译的Boost库版本冲突。尝试编译编译或使用编译编译程序的C++编译器版本。

也要仔细检查预处理器变量<代码>的设置,即GLYBCXXUIXUXCX1111ABI 与编译Boost的变量的设置相同。变量的默认设置可能会有所不同,具体取决于Linux发行版和所用GNU编译器的版本


有关更多信息,请参阅。

打开终端并写入
updatedb&&locate libboost\u program\u选项
。这将找到为boost安装lib文件的路径。locate libboost_program_options不会返回任何内容,但正如我所说的,boost文件夹位于/usr/include中,并且它还有一个文件夹program options soops抱歉,刚才看到了编辑。运行该命令并收到此错误updated B:无法为打开临时文件`/var/lib/mlocate/mlocate.dbmight需要sudo。。您还可以使用
find
命令定位文件,但我发现
locate
命令更易于使用。
updatedb
命令只更新安装了MATLAB的
locate
使用的数据库。现在locate命令显示文件位于/usr/local/MATLAB/R2011a/bin/glnx86/libboost\u程序选项中。so.1.40.0I已从repo安装,但是-lboost\u program\u选项给了我一个错误/usr/bin/ld:找不到-lboost\u program\u选项在CMake中,您应该使用
find\u包(Boost…
定位Boost并使用
目标链接库
指定库;这在移植到其他编译器/OS时很有帮助。在我的系统中,
-lboost\u程序选项
起作用。@user1633316:您可以搜索
libboost-*
文件。请注意,用
-L
给出该路径。您安装了progr吗am options from repo?对于带有MacPorts boost库的OSX,在安装libboost1.55-all-devt之后,使用-lboost\u program\u options-mt在Ubuntu 14.04上修复了这个问题。这让我走上了正确的轨道!我需要用
g++-5
而不是
g++-4.8
来编译我的东西。Ubuntu 16.04有
g++-4.8
可能不好默认的代码<代码> G++< /Cult>编译器,而它提供的C++库显然是通过<代码> G++-5 编译的。