Linking libdolfin fails due to boost::program_options
Issue #1103
new
Hi all,
I am trying to install dolfin by building from source (dolfin-2019.1.0.post0). The compilation runs smooth, but the linking fails unfortunately:
[100%] Linking CXX shared library libdolfin.dylib
Undefined symbols for architecture x86_64:
"boost::program_options::to_internal(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
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> > > > 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&) in Parameters.cpp.o
"boost::program_options::validation_error::get_template[abi:cxx11](boost::program_options::validation_error::kind_t)", referenced from:
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const& boost::program_options::validators::get_single_string<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&, bool) in Parameters.cpp.o
"boost::program_options::options_description::options_description(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&, unsigned int, unsigned int)", referenced from:
dolfin::Parameters::parse_common(int, char**) in Parameters.cpp.o
"boost::program_options::invalid_option_value::invalid_option_value(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&)", referenced from:
void boost::program_options::validate<double, 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&, double*, long) in Parameters.cpp.o
void boost::program_options::validate<int, 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&, int*, long) in Parameters.cpp.o
"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)", referenced from:
std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const& boost::program_options::validators::get_single_string<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&, bool) in Parameters.cpp.o
"boost::program_options::arg[abi:cxx11]", referenced from:
boost::program_options::typed_value<int, char>::name[abi:cxx11]() const in Parameters.cpp.o
boost::program_options::typed_value<bool, char>::name[abi:cxx11]() const in Parameters.cpp.o
boost::program_options::typed_value<double, char>::name[abi:cxx11]() const in Parameters.cpp.o
boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char>::name() const in Parameters.cpp.o
"boost::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&)", referenced from:
boost::program_options::basic_command_line_parser<char>::basic_command_line_parser(int, char const* const*) in Parameters.cpp.o
"boost::program_options::validate(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::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >*, int)", referenced from:
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 in Parameters.cpp.o
"boost::program_options::validate(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*, int)", referenced from:
boost::program_options::typed_value<bool, 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 in Parameters.cpp.o
"boost::program_options::operator<<(std::basic_ostream<char, std::char_traits<char> >&, boost::program_options::options_description const&)", referenced from:
dolfin::Parameters::parse_common(int, char**) in Parameters.cpp.o
"boost::program_options::abstract_variables_map::operator[](std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const", referenced from:
dolfin::Parameters::read_vm(boost::program_options::variables_map&, dolfin::Parameters&, std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >) in Parameters.cpp.o
"boost::program_options::error_with_option_name::substitute_placeholders(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) const", referenced from:
vtable for boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value> in Parameters.cpp.o
vtable for boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value> > in Parameters.cpp.o
construction vtable for boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::invalid_option_value> >-in-boost::wrapexcept<boost::program_options::invalid_option_value> in Parameters.cpp.o
vtable for boost::wrapexcept<boost::program_options::invalid_option_value> in Parameters.cpp.o
vtable for boost::exception_detail::error_info_injector<boost::program_options::validation_error> in Parameters.cpp.o
vtable for boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error> > in Parameters.cpp.o
construction vtable for boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::program_options::validation_error> >-in-boost::wrapexcept<boost::program_options::validation_error> in Parameters.cpp.o
...
"boost::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", referenced from:
vtable for boost::program_options::typed_value<int, char> in Parameters.cpp.o
vtable for boost::program_options::typed_value<bool, char> in Parameters.cpp.o
vtable for boost::program_options::typed_value<double, char> in Parameters.cpp.o
vtable for boost::program_options::typed_value<std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> >, char> in Parameters.cpp.o
ld: symbol(s) not found for architecture x86_64
collect2: error: ld returned 1 exit status
make[2]: *** [dolfin/libdolfin.2019.1.0.dylib] Error 1
make[1]: *** [dolfin/CMakeFiles/dolfin.dir/all] Error 2
make: *** [all] Error 2
I guess it’s related to the boost library. See the attached make_install_log.txt and cmake_log.txt files for the detailed outputs. Any ideas what’s going on? Boost 1.72 is installed via Homebrew and according to the cmake log it has been found.
- macOS 10.15.2
- cmake 3.17 (homebrew)
- gcc 9.3.0 (homebrew)
- Boost 1.72 (homebrew)
I can reproduce the same linking error on a fresh installed macOS 10.15.4 with clang instead of gcc. Please let me know if you need further information.
Any help is really appreciated!
Jonathan