jules
jules

Reputation: 406

Using Google's regex library RE2 for C++: linking errors

I'm trying to use Google's regex library, RE2, in my C++ code but cannot get it to compile. Here is a simple test program that I wrote:

#include <iostream>
#include <re2/re2.h>

using namespace std;
using namespace re2;

int main (int argc, char **argv)
{
    cout << "hello world" << endl;

    int matchResult;

    matchResult = RE2::FullMatch("hello", "h.*o");
    cout << "matchResult = " << matchResult << endl;

    return 0;
}

When I try to compile it using this g++ command:

g++ -I /usr/local/include -o test main.cc

I get these errors:

/var/tmp//ccOMm5QM.o(.text+0x1f2): In function `main':
: undefined reference to `re2::RE2::RE2(char const*)'
/var/tmp//ccOMm5QM.o(.text+0x210): In function `main':
: undefined reference to `re2::RE2::FullMatch'
/var/tmp//ccOMm5QM.o(.text+0x227): In function `main':
: undefined reference to `re2::RE2::~RE2()'
/var/tmp//ccOMm5QM.o(.text+0x275): In function `main':
: undefined reference to `re2::RE2::~RE2()'
/var/tmp//ccOMm5QM.o(.gnu.linkonce.t._ZNK3re217VariadicFunction2IbRKNS_11StringPieceERKNS_3RE2ENS4_3ArgEXadL_ZNS4_10FullMatchNES3_S6_PKPKS7_iEEEclES3_S6_+0x27): In function `re2::VariadicFunction2<bool, re2::StringPiece const&, re2::RE2 const&, re2::RE2::Arg, &(re2::RE2::FullMatchN(re2::StringPiece const&, re2::RE2 const&, re2::RE2::Arg const* const*, int))>::operator()(re2::StringPiece const&, re2::RE2 const&) const':
: undefined reference to `re2::RE2::FullMatchN(re2::StringPiece const&, re2::RE2 const&, re2::RE2::Arg const* const*, int)'

I tried using the "-L" option:

g++ -I /usr/local/include -L/usr/local/lib -libre2 -o test main.cc

But get this error:

/usr/bin/ld: cannot find -libre2.so

Even though the library exists:

$ ls -l /usr/local/lib/libre2*
-rwxr-xr-x  1 root  root  9322236 Sep 28 12:00 /usr/local/lib/libre2.a
lrwxr-xr-x  1 root  root       15 Sep 28 12:00 /usr/local/lib/libre2.so -> libre2.so.0.0.0
lrwxr-xr-x  1 root  root       15 Sep 28 12:00 /usr/local/lib/libre2.so.0 -> libre2.so.0.0.0
-rwxr-xr-x  1 root  root  3597784 Sep 28 12:00 /usr/local/lib/libre2.so.0.0.0

Any ideas as to what I'm missing?

Upvotes: 4

Views: 4165

Answers (2)

brucelin
brucelin

Reputation: 26

update LD_LIBRARY_PATH to include the re2 library path

Upvotes: 0

Travis Gockel
Travis Gockel

Reputation: 27673

The -l option means to add a library to link to. So, when you say -libre2, it means "link to the library ibre2", which is probably not what you meant. Use -lre2.

Upvotes: 4

Related Questions