11

次のサンプルコードがあります。

#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。ただし、 call で GCC 境界チェックを有効にしようとするとg++ test.cpp -lboost_program_options -D_GLIBCXX_DEBUG、次のリンカ エラーがスローされます。

/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

私が理解している限り、リンカーは function を見つけることができません。これはboost::program_options::detail::cmdline::cmdline(std::__debug::vector<std::string, std::allocator<std::string> > const&)、その引数が通常の代わりにデバッグ ベクトルに置き換えられているためstd::vectorです。しかし、なぜこれが起こるのですか?そして、Boost Program Options を動作させるための回避策を知っている人はいGLIBCXX_DEBUGますか?

私は次のシステムを使用しています。

  • Debian ウィージー
  • g++ (デビアン 4.7.2-5) 4.7.2
  • libboost-all-dev 1.49.0.1、aptitude 経由でインストール

助けてくれてありがとう

4

1 に答える 1