I have a code that can be compiled fine on the server but not on my mac machines. The following code is designed to split the reading text according to the string delimiter. But when trying to compile this on my mac, I have issues.

void split_is(const std::string &s, string delim_regex, std::vector<std::string> &elems) {
    // Terribly slow and inefficient, sorry. Should probably fix this at some point
    boost::algorithm::split_regex(elems, s, regex(delim_regex));
    std::vector<std::string> non_zero_elems;
    for(int e = 0; e < elems.size(); e++){
        if (elems[e].length() > 0){
            non_zero_elems.push_back(elems[e]);
        }
    }
    elems = non_zero_elems;
}

error is

Undefined symbols for architecture x86_64:
  "boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::do_assign(char const*, char const*, unsigned int)", referenced from:
      boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::assign(char const*, char const*, unsigned int) in tools.o
  "boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::construct_init(boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags)", referenced from:
      boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::perl_matcher(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::string>) in tools.o
  "boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, boost::regex_traits<char, boost::cpp_regex_traits<char> > >::find()", referenced from:
      bool boost::regex_search<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > >, char, boost::regex_traits<char, boost::cpp_regex_traits<char> > >(__gnu_cxx::__normal_iterator<char const*, std::string>, __gnu_cxx::__normal_iterator<char const*, std::string>, boost::match_results<__gnu_cxx::__normal_iterator<char const*, std::string>, std::allocator<boost::sub_match<__gnu_cxx::__normal_iterator<char const*, std::string> > > >&, boost::basic_regex<char, boost::regex_traits<char, boost::cpp_regex_traits<char> > > const&, boost::regex_constants::_match_flags, __gnu_cxx::__normal_iterator<char const*, std::string>) in tools.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)

or in the attachment.

Does anyone know what is happening?

Attachments Screen_Shot_2015-05-26_at_10.51_.54_AM_.png 150.23 KB

You are not telling your linker which libraries to look in. Find the right library on your Mac (I'm guessing the Boost regex library) and tell your linker about it.

What Moschops said. You need to use the appropriate -L <library-dir> and -l <lib-name> in your linker variable LDFLAGS in your Makefile. FWIW, my wife uses the boost libraries all the time on both Linux and Mac systems without problems. Do read the make man pages.

Edited 1 Year Ago by rubberman

This article has been dead for over six months. Start a new discussion instead.