First defined here : je ne m'en sors pas

Bonjour à toutes et à tous,

Dans mon application de routeur, j'ai une variable const uint8_t nbPt = 48; définie dans un fichier mesures.h. Je me sers de cette variable dans ce fichier .h et le mesures.cpp qui va avec. Je me sers aussi ce cette variable dans le fichier .ino qui, lui possède un #include vers ce fichier mesures.h. Tout ça se compile et fonctionne très bien.

Je voudrais déplacer cette variable dans un fichier Utils.h car j'en aurais aussi besoin dans ce fichier.

Ce que je fais alors :

  • Je place cette variable dans le fichier Utils.h,
  • dans le fichier mesures.h, je place un #include "Utils.h"

et lorsque je compile le tout, j'ai tout ce qui suit :

c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:22: multiple definition of `modeFct'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:22: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:21: multiple definition of `teta0Seuil'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:21: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:20: multiple definition of `teta0Min'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:20: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:19: multiple definition of `teta0Max'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:19: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:18: multiple definition of `pMaxSurplus'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:18: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:23: multiple definition of `statut0'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:23: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:24: multiple definition of `forceWiFi'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:24: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:17: multiple definition of `teta0'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:17: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:17: multiple definition of `teta1'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:17: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:11: multiple definition of `info_UIP'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:11: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:12: multiple definition of `pAonde'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:12: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:9: multiple definition of `infUIoK'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:9: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:10: multiple definition of `infUI'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:10: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:8: multiple definition of `fchHisto'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:8: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o: in function `ecritParams(String)':
E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:29: multiple definition of `ecritParams(String)'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:29: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:27: multiple definition of `params'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:27: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o: in function `litParams(String, unsigned char)':
E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:39: multiple definition of `litParams(String, unsigned char)'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:39: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:25: multiple definition of `fchParams'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:25: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:14: multiple definition of `ptsI'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:14: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:13: multiple definition of `ptsV'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:13: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:15: multiple definition of `noFch'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:15: first defined here
c:/users/prcha/appdata/local/arduino15/packages/esp32/tools/esp-x32/2302/bin/../lib/gcc/xtensa-esp32-elf/12.2.0/../../../../xtensa-esp32-elf/bin/ld.exe: C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Routeur_PV_01_with_OTA.ino.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:16: multiple definition of `nomJour'; C:\Users\prcha\AppData\Local\arduino\sketches\2C1C85B3E085F5E39A542AE602CF36FC\sketch\Mesures.cpp.o:E:\Arduino\Projets_ChP\Routeur_PV_01_with_OTA/Utils.h:16: first defined here
collect2.exe: error: ld returned 1 exit status
Plusieurs bibliothèque trouvées pour "AsyncTCP.h"
  Utilisé: E:\Arduino\libraries\AsyncTCP
  Non utilisé: E:\Arduino\libraries\Async_TCP
exit status 1

Compilation error: exit status 1

Je me retrouve avec un quantité de Utils.h:22: multiple definition of suivi de Utils.h:22: first defined here ; c'est -à-dire le seul et même endroit où sont définis ces variables.NOTA : tous mes fichiers .h sont munis de

#ifndef NOMDUFICHIER_H
#define NOMDUFICHIER_H
...
#endif

Merci de votre aide.

Pierre.

mais encore :slight_smile:

:frowning_face: Que dois-je faire pour sortir de ce problème. Si ça peut aider, je veux bien joindre tous les fichiers de mon application.

Cordialement.

Pierre.

On ne met pas la définition (l’allocation mémoire) dans le .h, gardez ça pour le .cpp ou le .ino (sinon a chaque fois que vous importez le fichier vous définissez une variable globale avec ce nom et donc à l’édition de lien le compilateur n’est pas content car vous avez une redéfinition de cette variable).

Dans le .h mettez juste

extern uint8_t nbPt; // on declare la variable pour que le compilo connaisse le type

Et dans un des .cpp (ou le ino) vous mettez la définition

uint8_t nbPt = 48;

Chaque fichier utilisant nbPt importe le .h et donc connaît le type de la variable, donc le compilo peut générer le code et à l’édition de liens, la définition est retrouvée et son adresse réinjectée partout où c’était nécessaire

Merci J-M-L de me rafraichir la mémoire ; j'avais déjà utilisé ce principe dans des projets anciens.

Mais étant un habitué du Pascal où, lorsque une variable est déclarée dans une unité, elle l'est pour toutes les autres unités pour autant qu'on mette cette unité dans la clause uses de ce autres unités.

Cordialement.

Pierre.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.