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 编译的。