1
votes

I am getting this error while using Nick Gammon's Regexp library. The error is below:

libraries/Regexp/Regexp.cpp.o:(.text._ZL5errorc+0x4): undefined reference to `longjmp'
libraries/Regexp/Regexp.cpp.o: In function `error':
/Users/jaiprak/projects/Arduino/libraries/Regexp/Regexp.cpp:640: undefined reference to `longjmp'
libraries/Regexp/Regexp.cpp.o: In function `max_expand':
/Users/jaiprak/projects/Arduino/libraries/Regexp/Regexp.cpp:640: undefined reference to `setjmp'
libraries/Regexp/Regexp.cpp.o: In function `MatchState::Match(char const*, unsigned int)':
/Users/jaiprak/projects/Arduino/libraries/Regexp/Regexp.cpp:640: undefined reference to `setjmp'
collect2: error: ld returned 1 exit status
exit status 1
Error compiling for board Generic ESP8266 Module.

And this is my Arduino code:

#include <Regexp.h>

// called for each match
void match_callback  (const char * match,          // matching string (not null-terminated)
                  const unsigned int length,   // length of matching string
                  const MatchState & ms)      // MatchState in use (to get captures)
{
    char cap [10];   // must be large enough to hold captures

    Serial.print ("Matched: ");
    Serial.write ((byte *) match, length);
    Serial.println ();

    for (byte i = 0; i < ms.level; i++)
    {
        Serial.print ("Capture "); 
        Serial.print (i, DEC);
        Serial.print (" = ");
        ms.GetCapture (cap, i);
        Serial.println (cap); 
    }  // end of for each capture

}  // end of match_callback 


void setup ()
{
      Serial.begin (115200);
      Serial.println ();
      unsigned long count;

      // what we are searching (the target)
      char buf [100] = "The quick brown fox jumps over the lazy wolf";

      // match state object
      MatchState ms (buf);

      // original buffer
      Serial.println (buf);

      // search for three letters followed by a space (two captures)
      count = ms.GlobalMatch ("(%a+)( )", match_callback);

      // show results
      Serial.print ("Found ");
      Serial.print (count);            // 8 in this case
      Serial.println (" matches.");


}  // end of setup  

void loop () {}
1

1 Answers

0
votes

setjmp and longjump are normaly part of libc that is not used by ESP8266 core for Arduino.

This issue is described in #910. A comment suggests to implement it in libc_replacements.c without indicating how this could be achieved.