我试图编译代码,我得到的错误
未定义参考boost::program_options::options_description::m_default_line_length
我用G ++在Ubuntu 12.04。 虽然我已经做了一些C ++编程我是新来的Linux开发环境(仅使用以前的IDE)。
所以我做了这麻烦一个基本的搜索,发现的一些链接问题。 我不明白他们因为我是一个新手。 阅读一些这些解决方案的进一步搞糊涂了。 我Boost库文件夹是在/usr/include
。 一些解决方案说,它应该是在/usr/lib
。 但我没有任何提升的文件夹在那里。
我需要做什么改变吗?
如果您已经安装了回购提振只使用-lboost_program_options
这就够了。
如果你在其他一些库安装Boost库,您需要通过指定directoty -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})
有更改<string>
类在C ++ 11标准,其可以与用非C ++ 11编译器(如G ++ - 4.8)编译Boost库的版本冲突。 尝试重新编译升压或使用C ++编译器的版本,用于编译Boost库。
也仔细检查预处理器变量的设置_GLIBCXX_USE_CXX11_ABI
是相同的用于编译升压的变量的设置。 该变量的默认设置可以根据所使用的GNU编译器的Linux分发和版本是不同的。
见双ABI以获取更多信息。
在哪里Boost库(文件以.so和.A结束)? 找到这些,然后添加到您的链接命令:-L /路径/到/升压/库-lname-的升压-LIB
这有可能是最常见的问题的人时,首先启动C面++。 有可能在SO一千其他未定义的引用问题。 只要搜索未定义的引用。
这些库通常安装到/usr/lib
(如我的系统上, /usr/lib/x86_64-linux-gnu/libboost_program_options.so.1.58.0
)。
为了编译将会与那些库链接代码,您通常使用的头文件中,提供的/usr/include
。
不像许多图书馆,加速不附带pkg配置文件,所以你需要自己添加链接标志。 与通常的Makefile的规则,你需要像LDLIBS += -lboost_program_options
。
还要注意的是,虽然libboost-dev
软件包提供的标头program_options
,你也需要安装libboost-program-options-dev
得到相应的库。
文章来源: undefined reference to `boost::program_options::options_description::m_default_line_length'