[Résolu] Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560

Bonjour à tous!

Je suis actuellement en train de plancher sur la suite d'un projet de quelqu'un d'autre. J'ai donc récupéré un code Arduino fonctionnel implémenté sur une carte Méga 2560. Cependant, je veux modifier ce code, mais lorsque je lance la vérification j'ai le message d'erreur suivant :

Arduino : 1.8.10 (Mac OS X), Carte : "Arduino/Genuino Mega or Mega 2560, ATmega2560 (Mega 2560)"

In file included from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson/Configuration.hpp:119:0,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson/Namespace.hpp:7,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson.hpp:15,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson.h:9,
                 from sketch/JSONClient.cpp:2:
/private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:131:5: error: conflicting declaration of C function 'int atexit(void (*)(...))'
 int atexit(void (*func)()) __attribute__((weak));
     ^~~~~~
In file included from /private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:23:0,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson/Configuration.hpp:119,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson/Namespace.hpp:7,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson.hpp:15,
                 from /Users/pauline/Documents/Arduino/libraries/ArduinoJson/src/ArduinoJson.h:9,
                 from sketch/JSONClient.cpp:2:
/private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/hardware/tools/avr/avr/include/stdlib.h:685:12: note: previous declaration 'int atexit(void (*)())'
 extern int atexit(void (*)(void));
            ^~~~~~
Plusieurs bibliothèque trouvées pour "UTFT.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/UTFT
Plusieurs bibliothèque trouvées pour "URTouch.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/URTouch
Plusieurs bibliothèque trouvées pour "SdFat.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/SdFat
Non utilisé : /Users/pauline/Documents/Arduino/libraries/SdFat_-_Adafruit_Fork
Plusieurs bibliothèque trouvées pour "SPI.h"
Utilisé : /private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/SPI
Plusieurs bibliothèque trouvées pour "Adafruit_ADS1015.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/Adafruit_ADS1X15
Plusieurs bibliothèque trouvées pour "Ethernet.h"
Utilisé : /private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/libraries/Ethernet
Plusieurs bibliothèque trouvées pour "RTClib.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/RTClib
Plusieurs bibliothèque trouvées pour "UTFT_SdRaw.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/UTFT_SdRaw
Plusieurs bibliothèque trouvées pour "SparkFunBME280.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/SparkFun_BME280
Plusieurs bibliothèque trouvées pour "ArduinoJson.h"
Utilisé : /Users/pauline/Documents/Arduino/libraries/ArduinoJson
Plusieurs bibliothèque trouvées pour "Wire.h"
Utilisé : /private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/hardware/arduino/avr/libraries/Wire
exit status 1
Erreur de compilation pour la carte Arduino/Genuino Mega or Mega 2560

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

J'ai épluché les forums et ce problème a l'air d'être récurent mais date déjà d'il y a quelques années... Je pense qu'il s'agit d'un problème avec l'une ou l'autre de mes bibliothèques: j'ai donc essayé d'installer des versions plus anciennes de ces dernières, de même pour l'IDE.
Quelqu'un aurait-il une idée d'où proviendrait le problème s'il vous plait ?

En vous remerciant infiniment

Pauline

Tu pense sérieusement que sans ton code on va pouvoir dire quoi que ce soit ?

BONJOUR. Vous n’avez pas besoin d’être agressif dans vos réponses.

Etant donné que le problème ne vient pas du code et que le nombre de caractères sur le forum est limité à 9000, j’ai privilégié le message d’erreur qui indique également les librairies qui peuvent poser problème.

Cependant, je peux bien sur fournir le code puisque c’est si gentiment demandé.

Merci pour votre aide et très bonne soirée

Multi-Sensors.ino (25.8 KB)

On va avoir du mal à savoir qui est agressif et qui est susceptible ...

#include "EE894.h"
#include "JSONClient.h"
#include "MiCS.h"

qui indique également les librairies qui peuvent poser problème

Pas vraiment, sans plus d'éléments pour trouver les librairies en question :confused:

                 from sketch/JSONClient.cpp:2:
/private/var/folders/sk/ylq_cxl52k37ybd7dlr7lmsh0000gn/T/AppTranslocation/9F79A691-DF5E-4B9D-B643-6F4C4C834C0F/d/Arduino.app/Contents/Java/hardware/arduino/avr/cores/arduino/Arduino.h:131:5: error: conflicting declaration of C function 'int atexit(void (*)(...))'
 int atexit(void (*func)()) __attribute__((weak));
     ^~~~~~

Pour l'instant JSONClient.cpp (où est ce fichier ?) est en cause, c'est tout ce que l'on peut dire.
Mais sans les sources ...

hbachetti:
On va avoir du mal à savoir qui est agressif et qui est susceptible ...

L'émeu s'émeut ? :grin:

Non, l'autruche :smiley:

Ça me casse mon jeu de mot...

Non, L'autruche s'émeut n'est pas mal non plus :smiling_imp:

Tu es indulgent, merci : le koala aimeu l'autruche...

hbachetti:
Non, L'autruche s'émeut n'est pas mal non plus :smiling_imp:

Ou la vache s'émeut ?

Cependant, je veux modifier ce code, mais lorsque je lance la vérification j'ai le message d'erreur suivant :

L'erreur est produite en compilant le code modifié ou le code original?

Il est toujours bon d'activer le compte-rendu détaillé comme l'indique la remontée d'erreur

Ce rapport pourrait être plus détaillé avec
l'option "Afficher les résultats détaillés de la compilation"
activée dans Fichier -> Préférences.

Il faut nous donner un lien vers la librairie json utilisée. Il en existe plusieurs ayant un nom similaire.

S'il n'y avait que cela. Il y a aussi :

#include "EE894.h"
#include "JSONClient.h"
#include "MiCS.h"

  • JSONClient.cpp

Il est probable qu'il s'agisse de librairies ou de sources annexes au projet.

Il s'agissait effectivement d'un problème de compatibilité avec la bibliothèque Json. J'ai installé une ancienne version de cette dernière et la problème est réglé.

Merci pour votre aide !

Il n’est jamais très optimal de travailler avec une ancienne version.

On peut remarquer que dans la dernière version :

#include <Arduino.h>

Alors que dans la branche 5.x Arduino.h n’est pas inclus.

Je remarque que dans un source quelconque si j’inclus :
#include <ArduinoJson.h>
#include <Arduino.h>

J’obtiens :
/mnt/sdc1/riton/arduino-1.8.11/hardware/arduino/avr/cores/arduino/Arduino.h:132:48: error: conflicting declaration of C function ‘int atexit(void (*)(…))’
int atexit(void (*func)()) attribute((weak));

Alors que si je fais l’inverse :
#include <Arduino.h>
#include <ArduinoJson.h>

Aucun problème.

Il y a probablement un fichier source (JSONClient.cpp ?) qui inclut ArduinoJson.h avant d’inclure Arduino.h
Il suffirait de supprimer l’inclusion de Arduino.h dans ce source ou d’inverser les deux lignes.