【发布时间】:2013-11-12 18:54:51
【问题描述】:
我有以下示例代码:
#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 一起工作?
我使用以下系统:
- Debian Wheezy
- g++ (Debian 4.7.2-5) 4.7.2
- libboost-all-dev 1.49.0.1,通过 aptitude 安装
感谢您的帮助
【问题讨论】:
-
看起来你需要一个用于
boost::program_options的调试库 -
@P0W,我假设这些是用
GLIBCXX_DEBUG编译的boost 库,对吧?那么有没有一种方便的方法来获取它们并在两者之间切换? -
不,
-dev后缀通常意味着包包含开发者头文件和链接库。这并不意味着启用了 libstdc++ 迭代器调试。
标签: c++ boost linker g++ boost-program-options