[英]Boost Program Options won't work with GLIBCXX_DEBUG
我有以下示例代码:
#include <iostream>
#include <boost/program_options.hpp>
int main ( int ac, char *av[] ) {
// Declare the supported options.
boost::program_options::options_description desc("Allowed options");
desc.add_options()("help", "produce help message");
boost::program_options::variables_map vm;
boost::program_options::store(boost::program_options::parse_command_line(ac, av, desc), vm);
return 0;
}
使用g++ test.cpp -lboost_program_options
很好地编译。 但是,如果我尝试通过调用g++ test.cpp -lboost_program_options -D_GLIBCXX_DEBUG
来激活GCC边界检查,则会引发以下链接器错误:
/tmp/ccZLdZ1g.o: In function `boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*)':
test.cpp:(.text._ZN5boost15program_options25basic_command_line_parserIcEC2EiPKPKc[_ZN5boost15program_options25basic_command_line_parserIcEC5EiPKPKc]+0x97): undefined reference to `boost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::string, std::allocator<std::string> > const&)'
collect2: error: ld returned 1 exit status
据我了解,链接器找不到函数boost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::string, std::allocator<std::string> > const&)
,因为其参数由调试向量代替了普通的std::vector
。 但是为什么会这样呢? 有谁知道一种解决方法,可以使Boost Program Options与GLIBCXX_DEBUG
一起GLIBCXX_DEBUG
?
我使用以下系统:
谢谢你的帮助
错误消息在这里非常清楚,链接器找不到符号
boost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::string, std::allocator<std::string> > const&)
请注意附加的__debug
命名空间,这意味着您正在使用_GLIBCXX_DEBUG
进行构建。 这将不起作用,因为您的程序包维护人员未使用此定义来构建boost库,因此出现了链接器错误。 您有几种选择
_GLIBCXX_DEBUG
。 这可能需要一些重构,具体取决于您要在启用迭代器调试的情况下尝试解决的问题。 -D_GLIBCCX_DEBUG
构建Boost库。 尽管boost构建系统相当简单,但这也不是不重要的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.