2016-08-05 6 views
2

Ich arbeite an einer Skizze und ich verwende ArduinoJSON. Ich dachte, ich könnte das durchgehen und sehen, ob die Leute diesen Fehler gesehen haben.ArduinoJSON undefined Verweis auf `__cxa_guard_acquire '

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. 

Hier ist ein Teil meines Arduino Code, wo ich das jsonArray-Objekt erstellen:

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"); 
} 

Hier ist die JSONArray ungültige Funktion:

static JsonArray &invalid() { 
    static JsonArray instance(NULL); 
    return instance; 
} 

Hier ist die JSONObject ungültige Funktion:

// 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; 
} 

Antwort

4

Versuchen Sie es mit der folgenden Zusammenstellung Flagge:

-fno-threadsafe-statics

nicht den zusätzlichen Code austrahlen, die Routinen in der C++ ABI für Thread-sichere Initialisierung der lokalen Statik angegeben zu verwenden. Sie können diese Option verwenden, um die Codegröße in Code, der nicht threadsicher sein muss, geringfügig zu reduzieren.

See gibt #356 und #361