我正在尝试编译代码,我收到了错误
对
的未定义引用boost::program_options::options_description::m_default_line_length
我在Ubuntu 12.04中使用g ++。虽然我已经完成了一些C ++编程,但我还不熟悉Linux开发环境(之前只使用过IDE)。
所以我对这个问题做了基本的搜索,发现了一些链接问题。因为我是新手,所以我不太了解他们。阅读其中一些解决方案让我更加困惑。我的提升库文件夹位于/usr/include
。一些解决方案说它应该在/usr/lib
。但我那里没有任何提升文件夹。
我需要改变什么?
答案 0 :(得分:27)
如果你已经从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})
答案 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
以获取相应的库。