неопределенная ссылка на `longjmp' при использовании библиотеки для регулярных выражений в Arduino IDE

Я получаю эту ошибку при использовании библиотеки Regexp Ника Гэммона. Ошибка ниже:

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.

И это мой код Arduino:

#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 () {}

person Jai Prak    schedule 15.09.2016    source источник


Ответы (1)


setjmp и longjump обычно являются частью libc, которая не используется ядром ESP8266 для Arduino.

Эта проблема описана в #910. В комментарии предлагается реализовать его в libc_replacements.c без с указанием того, как этого можно достичь.

person mpromonet    schedule 19.09.2016