moses
moses copied to clipboard
Boost fails
Lots'o boost errors. Using boost 1.58 for the most part. A couple of 1.54s.
CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::xparse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const': /usr/local/include/boost/program_options/detail/value_semantic.hpp:167: undefined reference to boost::program_options::validate(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::validation_error::validation_error(boost::program_options::validation_error::kind_t, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)': /usr/local/include/boost/program_options/errors.hpp:373: undefined reference to boost::program_options::validation_error::get_templateabi:cxx11'
/usr/local/include/boost/program_options/errors.hpp:373: undefined reference to boost::program_options::error_with_option_name::error_with_option_name(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, int)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::basic_command_line_parserboost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::to_internal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::basic_command_line_parserboost::program_options::detail::cmdline::cmdline(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::arg[abi:cxx11]' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::typed_value<float, char>::name() const':
/usr/local/include/boost/program_options/detail/value_semantic.hpp:19: undefined reference to boost::program_options::arg[abi:cxx11]' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::typed_value<unsigned int, char>::name() const':
/usr/local/include/boost/program_options/detail/value_semantic.hpp:19: undefined reference to boost::program_options::arg[abi:cxx11]' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function boost::program_options::typed_value<unsigned long, char>::name() const':
/usr/local/include/boost/program_options/detail/value_semantic.hpp:19: undefined reference to boost::program_options::arg[abi:cxx11]' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function main':
/home/chris/Downloads/cog/moses/moses/comboreduct/main/gen-disj-conj.cc:57: undefined reference to boost::program_options::options_description::options_description(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function void boost::program_options::validate<float, char>(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::invalid_option_value::invalid_option_value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function void boost::program_options::validate<unsigned int, char>(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::invalid_option_value::invalid_option_value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o: In function void boost::program_options::validate<unsigned long, char>(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::invalid_option_value::invalid_option_value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options16validation_errorEEE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o:(.rodata._ZTVN5boost15program_options16validation_errorE[_ZTVN5boost15program_options16validation_errorE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' follow CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o:(.rodata._ZTVN5boost15program_options11typed_valueImcEE[_ZTVN5boost15program_options11typed_valueImcEE]+0x40): undefined reference to boost::program_options::value_semantic_codecvt_helperboost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const' CMakeFiles/gen-disj-conj.dir/gen-disj-conj.cc.o:(.rodata._ZTVN5boost15program_options11typed_valueIfcEE[_ZTVN5boost15program_options11typed_valueIfcEE]+0x40): undefined reference to boost::program_options::value_semantic_codecvt_helperboost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const' ../libcomboreduct.so: undefined reference to boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traitsboost::gregorian::greg_month::get_month_map_ptr[abi:cxx11]()' ../libcomboreduct.so: undefined reference to boost::re_detail_106100::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traitsparse_program_args(int, char**)': /home/chris/Downloads/cog/moses/moses/comboreduct/main/combo-fmt-converter.cc:63: undefined reference to boost::program_options::options_description::options_description(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::xparse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&) const': /usr/local/include/boost/program_options/detail/value_semantic.hpp:167: undefined reference to boost::program_options::validate(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::basic_command_line_parser<char>::extra_parser(boost::function1<std::pair<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&>)': /usr/local/include/boost/program_options/detail/parsers.hpp:78: undefined reference to boost::program_options::detail::cmdline::set_additional_parser(boost::function1<std::pair<std::__cxx11::basic_string<char, std::char_traitsstd::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > boost::program_options::to_internal<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > >(std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&)': /usr/local/include/boost/program_options/detail/convert.hpp:79: undefined reference to boost::program_options::to_internal(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*)': /usr/local/include/boost/program_options/detail/parsers.hpp:44: undefined reference to boost::program_options::detail::cmdline::cmdline(std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::name() const': /usr/local/include/boost/program_options/detail/value_semantic.hpp:19: undefined reference to boost::program_options::arg[abi:cxx11]'
CMakeFiles/combo-fmt-converter.dir/combo-fmt-converter.cc.o: In function boost::program_options::typed_value<std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >, char>::name() const': /usr/local/include/boost/program_options/detail/value_semantic.hpp:19: undefined reference to boost::program_options::arg[abi:cxx11]'
CMakeFiles/combo-fmt-converter.dir/combo-fmt-converter.cc.o: In function void boost::program_options::validate<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > >*, int)': /usr/local/include/boost/program_options/detail/value_semantic.hpp:146: undefined reference to boost::program_options::validate(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traitsboost::program_options::invalid_option_value::invalid_option_value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)' CMakeFiles/combo-fmt-converter.dir/combo-fmt-converter.cc.o:(.rodata._ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE[_ZTVN5boost16exception_detail19error_info_injectorINS_15program_options20invalid_option_valueEEE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' CMakeFiles/combo-fmt-converter.dir/combo-fmt-converter.cc.o:(.rodata._ZTVN5boost15program_options16validation_errorE[_ZTVN5boost15program_options16validation_errorE]+0x30): undefined reference to boost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traitsboost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const' CMakeFiles/combo-fmt-converter.dir/combo-fmt-converter.cc.o:(.rodata._ZTVN5boost15program_options11typed_valueISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEcEE[_ZTVN5boost15program_options11typed_valueISt6vectorINSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEESaIS8_EEcEE]+0x40): undefined reference to boost::program_options::value_semantic_codecvt_helperboost::program_options::value_semantic_codecvt_helper<char>::parse(boost::any&, std::vector<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, std::allocator<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > > > const&, bool) const' ../libcomboreduct.so: undefined reference to boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traitsboost::gregorian::greg_month::get_month_map_ptr[abi:cxx11]()' ../libcomboreduct.so: undefined reference to boost::re_detail_106100::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::__cxx11::basic_string<char, std::char_traits
Using boost 1.58 for the most part. A couple of 1.54s.
What does that mean? I don't think you can mix-n-match different versions of boost; that's just asking for trouble. You also seem to have boost installed in /usr/local, which means that you are not using a distro-supplied version, but a home-built version. That too is just asking for trouble.
moses builds fine, today, in debian stable with boost-1.62 and also on ubuntu 16.04, with whatever version of boost that supplies, on ubuntu 14.04, with whatever version of boost that supplies, and on five-6 year-old versions of redhat, with redhat-supplied boost 1.45 or something like that. Pretty much the whole rainbow has been used in all sorts of settings.
errors like undefined reference to boost::program_options mean exactly what they say: your boost libraries are not supplying the functions that the header files compile down to. This suggests that the boost libraries that you are linking to are not compatible with the boost header files that you compiled with.
Works for me with 1.55 and 1.62, @iplayfast what is your system? Are you sure all boost libraries are installed?
For me too. Though in mac. I'm getting
dyld: Symbol not found: __ZN5boost15program_options3argB5cxx11E Referenced from: /usr/local/lib/libmoses_exec.dylib Expected in: flat namespace in /usr/local/lib/libmoses_exec.dylib
You can explore the contents of a shared lib by saying
nm /where/is/libboost.dylib | less
nm /where/is/libboost.dylib | grep program_options
But i general, its bizarre for the compiler to generate symbols that the linker cannot resolve. This is a symptom of headers file versions that don't match library versions, or libraries tht are incomplete or incorrectly built.
I've attached the result of running nm /usr/local/Cellar/boost/1.67.0_1/lib/* | grep program_options > ~/Desktop/output output.txt
Do we need boost compiled with C++11?
Do we need boost compiled with C++11?
Maybe. A safe bet is to use the same compiler as the one one used for moses. In principle, this should not matter, because compilers are supposed to do the "right thing", but boost is kind-of flakey in that way.
cat output.txt | grep oost15program_options3arg
00000000000e65f8 S __ZN5boost15program_options3argE
0000000000036650 S __ZN5boost15program_options3argE
00000000000e65f8 S __ZN5boost15program_options3argE
0000000000036650 S __ZN5boost15program_options3argE
and, indeed, there is no cxx11 variant of the symbol in there. So either its in a different library, or its missing entirely for some reason.
Its possible that moses got compiled with the -cxx11 flag, which added the extra bit to the symbols, but boost was not. This would be a bit of MacOS falkeyness, I guess.
Hmm. Apparently, the ABI changed for cxx11, which explains why some symbols now have cxx11 as part of their name: they must be the ones using the new ABI. That would explain a lot, but I did not google this for more info.