malhobayyeb
malhobayyeb

Reputation: 2883

How can I use Boost::regex.hpp library in C++?

I tried to use Boost library but I failed, see my code:

#include "listy.h"
#include <boost/regex.hpp>
using namespace boost;

ListyCheck::ListyCheck() {

}

ListyCheck::~ListyCheck() {

}

bool ListyCheck::isValidItem(std::string &__item) {
    regex e("(\\d{4}[- ]){3}\\d{4}");

    return regex_match(__item, e);
}

When I tried to compile it I get those messages:

/usr/include/boost/regex/v4/regex_match.hpp:50: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator, std::allocator > >, std::allocator, std::allocator > > > >, boost::regex_traits >

::match()'

/usr/include/boost/regex/v4/basic_regex.hpp:425: undefined reference to `boost::basic_regex >

::do_assign(char const*, char const*, unsigned int)'

/usr/include/boost/regex/v4/perl_matcher.hpp:366: undefined reference to `boost::re_detail::perl_matcher<__gnu_cxx::__normal_iterator, std::allocator > >, std::allocator, std::allocator > > > >, boost::regex_traits >

::construct_init(boost::basic_regex > > const&, boost::regex_constants::_match_flags)'

etc...

Upvotes: 6

Views: 15463

Answers (4)

sivan shani
sivan shani

Reputation: 87

had similar issue.

the solution was to link via cmake with the command target link library:

target_link_libraries(boostGraph Boost::regex Boost::date_time Boost::system Boost::filesystem Boost::thread Boost::graph Boost::program_options)

using the syntax -lboost_regex as offered here did not work (at least not with cmake)

the root issue could have been different versions of libraries, which cause the issue and even though the compiler and the linker do find the regex lib.

Upvotes: 0

jopa
jopa

Reputation: 1139

You have to link against boost_regex.

Upvotes: 2

anon
anon

Reputation:

Those are linker errors. The Boost regex library is not a header-only library like shared_ptr (for example) - you need to link against the .a or .lib or whatever binary library.

Upvotes: 4

kennytm
kennytm

Reputation: 523364

You need to link to libboost_regex. Add -lboost_regex to the compiler switch if you're using gcc.

Upvotes: 12

Related Questions