Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/158.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 增强计划选项赢得';t使用GLIBCXX_调试_C++_Boost_Linker_G++_Boost Program Options - Fatal编程技术网

C++ 增强计划选项赢得';t使用GLIBCXX_调试

C++ 增强计划选项赢得';t使用GLIBCXX_调试,c++,boost,linker,g++,boost-program-options,C++,Boost,Linker,G++,Boost Program Options,我有以下示例代码: #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()("h

我有以下示例代码:

#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;
}
据我所知,链接器找不到函数
boost::program\u options::detail::cmdline::cmdline(std::\uu debug::vector const&)
,因为它的参数被调试向量替换,而不是普通的
std::vector
。但为什么会发生这种情况?还有谁知道一个变通方法,让Boost程序选项与GLIBCXX_DEBUG一起工作

我使用以下系统:

  • 德比安气喘
  • g++(Debian 4.7.2-5)4.7.2
  • libboost所有dev 1.49.0.1,通过aptitude安装

感谢您的帮助

此处的错误消息非常清楚,链接器无法找到符号

boost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::string, std::allocator<std::string> > const&)
boost::program\u options::detail::cmdline::cmdline(std::\u debug::vector const&)
请注意附加的
\u debug
命名空间,这意味着您正在使用
\u GLIBCXX\u debug
构建。这将不起作用,因为您的包维护人员没有使用此定义构建boost库,因此出现链接器错误。你有几个选择

  • 从包含程序选项标题的任何翻译单元中删除
    \u GLIBCXX\u DEBUG
    。这可能需要一些重构,具体取决于您在启用迭代器调试的情况下试图解决的问题
  • 使用
    -D\u GLIBCCX\u DEBUG
    构建boost库。尽管boost构建系统相当简单,但这也可能不是小事

看起来您需要一个用于
boost::program_options
@P0W的调试库,我假设这些是使用
GLIBCXX_debug
编译的boost库,对吗?那么,有没有一种方便的方法来获取它们并在两者之间切换呢?没有,
-dev
后缀通常意味着包中包含要链接的开发人员标题和库。这并不意味着启用了libstdc++迭代器调试。好的,谢谢。我使用
-D_GLIBCCX_DEBUG
成功地从源代码构建了所需的boost库,并且它工作正常。然而,我发现默认的boost安装在启用边界检查的情况下无法工作,这让我有些失望。相应的调试符号可以包含在库中,不是吗?@Haatschii没有默认的boost安装,包维护人员可能会提供几种选择。尽管我怀疑任何人都不会启用迭代器调试。这不仅仅是调试符号,库必须用定义的
\u GLIBCXX\u debug
标志重新编译。@Haatschii您是如何用-D\u GLIBCXX\u debug编译boost的?
boost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::string, std::allocator<std::string> > const&)