[Boost-bugs] [Boost C++ Libraries] #13173: "program_options" build fail. "boost::lambda" is working without any problem.

Subject: [Boost-bugs] [Boost C++ Libraries] #13173: "program_options" build fail. "boost::lambda" is working without any problem.
From: Boost C++ Libraries (noreply_at_[hidden])
Date: 2017-08-21 19:52:22


#13173: "program_options" build fail. "boost::lambda" is working without any
problem.
----------------------------------------+-----------------------------
 Reporter: Yoni Shperling <yoni386@…> | Owner: Vladimir Prus
     Type: Bugs | Status: new
Milestone: To Be Determined | Component: program_options
  Version: Boost 1.64.0 | Severity: Problem
 Keywords: |
----------------------------------------+-----------------------------
 Hello,

 "program_options" build fail. "boost::lambda" is working without any
 problem.

 This example below doesn't work:

 {{{
 #include "boost/program_options.hpp"
 namespace po = boost::program_options;

 #include <iostream>
 #include <iterator>
 using namespace std;

 int main(int ac, char* av[])
 {
     try {

         po::options_description desc("Allowed options");
         desc.add_options()
                 ("help", "produce help message")
                 ("compression", po::value<double>(), "set compression
 level");

         po::variables_map vm;
         po::store(po::parse_command_line(ac, av, desc), vm);
         po::notify(vm);

         if (vm.count("help")) {
             cout << desc << "\n";
             return 0;
         }

         if (vm.count("compression")) {
             cout << "Compression level was set to "
                  << vm["compression"].as<double>() << ".\n";
         } else {
             cout << "Compression level was not set.\n";
         }
     }
     catch(exception& e) {
         cerr << "error: " << e.what() << "\n";
         return 1;
     }
     catch(...) {
         cerr << "Exception of unknown type!\n";
     }

     return 0;
 }
 }}}

 {{{
 [ 50%] Linking CXX executable mem1
 Undefined symbols for architecture x86_64:
   "boost::program_options::validators::check_first_occurrence(boost::any
 const&)", referenced from:
       void boost::program_options::validate<double, char>(boost::any&,
 std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> >,
 std::__1::allocator<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > > > const&,
 double*, long) in main.cpp.o
   "boost::program_options::to_internal(std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&)",
 referenced from:
       std::__1::vector<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> >,
 std::__1::allocator<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > > >
 boost::program_options::to_internal<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> >
>(std::__1::vector<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> >,
 std::__1::allocator<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > > > const&) in
 main.cpp.o
   "boost::program_options::variables_map::variables_map()", referenced
 from:
       _main in main.cpp.o
 "boost::program_options::validation_error::get_template(boost::program_options::validation_error::kind_t)",
 referenced from:
 boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t,
 std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> > const&, std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) in
 main.cpp.o
   "boost::program_options::options_description::add_options()", referenced
 from:
       _main in main.cpp.o
   "boost::program_options::options_description::m_default_line_length",
 referenced from:
       _main in main.cpp.o
 "boost::program_options::options_description::options_description(std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&, unsigned
 int, unsigned int)", referenced from:
       _main in main.cpp.o
 "boost::program_options::invalid_option_value::invalid_option_value(std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&)",
 referenced from:
       void boost::program_options::validate<double, char>(boost::any&,
 std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> >,
 std::__1::allocator<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > > > const&,
 double*, long) in main.cpp.o
 "boost::program_options::error_with_option_name::error_with_option_name(std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&,
 std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> > const&, std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&, int)",
 referenced from:
 boost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t,
 std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> > const&, std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&, int) in
 main.cpp.o
   "boost::program_options::options_description_easy_init::operator()(char
 const*, boost::program_options::value_semantic const*, char const*)",
 referenced from:
       _main in main.cpp.o
   "boost::program_options::options_description_easy_init::operator()(char
 const*, char const*)", referenced from:
       _main in main.cpp.o
   "boost::program_options::arg", referenced from:
       boost::program_options::typed_value<double, char>::name() const in
 main.cpp.o
 "boost::program_options::store(boost::program_options::basic_parsed_options<char>
 const&, boost::program_options::variables_map&, bool)", referenced from:
       _main in main.cpp.o
 "boost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::__1::pair<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> >,
 std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> > >, std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&>)",
 referenced from:
 boost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::__1::pair<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> >,
 std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> > >, std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&>) in
 main.cpp.o
 "boost::program_options::detail::cmdline::set_options_description(boost::program_options::options_description
 const&)", referenced from:
 boost::program_options::basic_command_line_parser<char>::options(boost::program_options::options_description
 const&) in main.cpp.o
 "boost::program_options::detail::cmdline::get_canonical_option_prefix()",
 referenced from:
       boost::program_options::basic_command_line_parser<char>::run() in
 main.cpp.o
   "boost::program_options::detail::cmdline::run()", referenced from:
       boost::program_options::basic_command_line_parser<char>::run() in
 main.cpp.o
   "boost::program_options::detail::cmdline::style(int)", referenced from:
       boost::program_options::basic_command_line_parser<char>::style(int)
 in main.cpp.o
 "boost::program_options::detail::cmdline::cmdline(std::__1::vector<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> >,
 std::__1::allocator<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)",
 referenced from:
 boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int,
 char const* const*) in main.cpp.o
 "boost::program_options::notify(boost::program_options::variables_map&)",
 referenced from:
       _main in main.cpp.o
   "boost::program_options::operator<<(std::__1::basic_ostream<char,
 std::__1::char_traits<char> >&,
 boost::program_options::options_description const&)", referenced from:
       _main in main.cpp.o
 "boost::program_options::abstract_variables_map::operator[](std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&) const",
 referenced from:
 boost::program_options::variables_map::operator[](std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&) const in
 main.cpp.o
 "boost::program_options::error_with_option_name::substitute_placeholders(std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > const&) const",
 referenced from:
       vtable for
 boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error>
> in main.cpp.o
       vtable for
 boost::exception_detail::error_info_injector<boost::program_options::validation_error>
 in main.cpp.o
       vtable for boost::program_options::validation_error in main.cpp.o
       vtable for
 boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value>
> in main.cpp.o
       vtable for
 boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value>
 in main.cpp.o
       vtable for boost::program_options::invalid_option_value in
 main.cpp.o
   "boost::program_options::error_with_option_name::what() const",
 referenced from:
       vtable for
 boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error>
> in main.cpp.o
       vtable for
 boost::exception_detail::error_info_injector<boost::program_options::validation_error>
 in main.cpp.o
       vtable for boost::program_options::validation_error in main.cpp.o
       vtable for
 boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value>
> in main.cpp.o
       vtable for
 boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value>
 in main.cpp.o
       vtable for boost::program_options::invalid_option_value in
 main.cpp.o
 "boost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&,
 std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>,
 std::__1::allocator<char> >,
 std::__1::allocator<std::__1::basic_string<char,
 std::__1::char_traits<char>, std::__1::allocator<char> > > > const&, bool)
 const", referenced from:
       vtable for boost::program_options::typed_value<double, char> in
 main.cpp.o
   "typeinfo for boost::program_options::error_with_option_name",
 referenced from:
       typeinfo for boost::program_options::validation_error in main.cpp.o
   "typeinfo for
 boost::program_options::value_semantic_codecvt_helper<char>", referenced
 from:
       typeinfo for boost::program_options::typed_value<double, char> in
 main.cpp.o
   "vtable for boost::program_options::variables_map", referenced from:
       boost::program_options::variables_map::~variables_map() in
 main.cpp.o
   NOTE: a missing vtable usually means the first non-inline virtual member
 function has no definition.
   "vtable for boost::program_options::error_with_option_name", referenced
 from:
 boost::program_options::error_with_option_name::error_with_option_name(boost::program_options::error_with_option_name
 const&) in main.cpp.o
 boost::program_options::error_with_option_name::~error_with_option_name()
 in main.cpp.o
   NOTE: a missing vtable usually means the first non-inline virtual member
 function has no definition.
   "vtable for
 boost::program_options::value_semantic_codecvt_helper<char>", referenced
 from:
 boost::program_options::value_semantic_codecvt_helper<char>::value_semantic_codecvt_helper()
 in main.cpp.o
   NOTE: a missing vtable usually means the first non-inline virtual member
 function has no definition.
 ld: symbol(s) not found for architecture x86_64
 clang: error: linker command failed with exit code 1 (use -v to see
 invocation)
 make[3]: *** [mem1] Error 1
 make[2]: *** [CMakeFiles/mem1.dir/all] Error 2
 make[1]: *** [CMakeFiles/mem1.dir/rule] Error 2
 make: *** [mem1] Error 2
 }}}

 This example below is working:
 {{{
 #include <boost/lambda/lambda.hpp>
 #include <iostream>
 #include <iterator>
 #include <algorithm>

 int main()
 {
     using namespace boost::lambda;
     typedef std::istream_iterator<int> in;

     std::for_each(
             in(std::cin), in(), std::cout << (_1 * 3) << " " );
 }
 }}}

 Thank you,

 Yoni

-- 
Ticket URL: <https://svn.boost.org/trac10/boost/ticket/13173>
Boost C++ Libraries <http://www.boost.org/>
Boost provides free peer-reviewed portable C++ source libraries.

This archive was generated by hypermail 2.1.7 : 2017-08-21 19:58:39 UTC