ArduinoJSON对`__cxa_guard_acquire'的未定义引用

Pet*_*Sun 2 c json arduino

我正在绘制草图,并且正在使用ArduinoJSON。我以为我可以解决这个问题,看看人们是否看到了这个错误。

WifiNest.cpp.o:(.text._ZN11ArduinoJson9JsonArray7invalidEv[_ZN11ArduinoJson9JsonArray7invalidEv]+0x8): undefined reference to `__cxa_guard_acquire'
WifiNest.cpp.o:(.text._ZN11ArduinoJson9JsonArray7invalidEv[_ZN11ArduinoJson9JsonArray7invalidEv]+0xc): undefined reference to `__cxa_guard_release'
WifiNest.cpp.o: In function `ArduinoJson::JsonArray::invalid()':
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_acquire'
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_release'
WifiNest.cpp.o: In function `ArduinoJson::JsonObject::invalid()':
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_acquire'
C:\Program Files (x86)\Arduino/WifiNest.ino:156: undefined reference to `__cxa_guard_release'
collect2.exe: error: ld returned 1 exit status
Error compiling.
Run Code Online (Sandbox Code Playgroud)

这是我的Arduino代码的一部分,在其中创建jsonArray对象:

char jsonArray [result.length()+1];
result.toCharArray(jsonArray,sizeof(jsonArray));
jsonArray[result.length() + 1] = '\0';

DynamicJsonBuffer json_buf;
JsonObject &root = json_buf.parseObject(jsonArray);
if (!root.success())
{
    Serial.println("parseObject() failed");
}
Run Code Online (Sandbox Code Playgroud)

这是JSONArray无效函数:

static JsonArray &invalid() {
    static JsonArray instance(NULL);
    return instance;
}
Run Code Online (Sandbox Code Playgroud)

这是JSONObject无效函数:

// Returns a reference an invalid JsonObject.
// This object is meant to replace a NULL pointer.
// This is used when memory allocation or JSON parsing fail.
static JsonObject& invalid() {
    static JsonObject instance(NULL);
    return instance;
}
Run Code Online (Sandbox Code Playgroud)

Ben*_*hon 6

尝试使用以下编译标志:

-fno-threadsafe-statics

不要发出多余的代码来使用C ++ ABI中指定的例程对本地静态变量进行线程安全的初始化。您可以使用此选项在不需要线程安全的代码中稍微减小代码大小。

参见问题#356#361