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