c++ - 在 Arduino IDE 中使用正则表达式库时未定义对 `longjmp' 的引用

标签 c++ compiler-errors esp8266 arduino-ide setjmp

我在使用 Nick Gammon's Regexp library 时遇到此错误.错误如下:

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

最佳答案

setjmplongjump 是 libc 的正常部分,ESP8266 core for Arduino 不使用它。 .

#910 中描述了此问题.评论建议在 libc_replacements.c 中实现它没有说明这是如何实现的。

关于c++ - 在 Arduino IDE 中使用正则表达式库时未定义对 `longjmp' 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39515570/

相关文章:

c++ - 如何检查 QT_VERSION 以包含不同的标题?

java - 为什么我收到 "symbol not found"错误?

c++ - 加密货币在编译时出现错误

arduino - 使用 ESP8266 将 Arduino 连接到 Blynk

C++, vector 上的对象

c++ - CMake find_package 可以是 "common dependency version aware"吗?

c++ - 如何修复错误代码 E1696?在 Windows Visual Studio 2019 中

ios - NodeMCU ESP8266 使用 C 连接到 iPhone 热点

mqtt - 无法连接到 test.mosquitto.org

c++ - 使用预处理器检查字节顺序