Auteur Sujet: problème pour l'utilisation d'une librairie maison  (Lu 371 fois)

Babazou38

  • Newbie
  • *
  • Messages: 9
    • Voir le profil
problème pour l'utilisation d'une librairie maison
« le: février 25, 2025, 02:30:06 pm »
Bonjour à tous,

je suis en train de créer une librairie. Avant d'aller plus loin, j'ai fait quelque chose de 'simple'. La création et l'integration de cette librairie dans l'IDE Arduino se passe bien.
Dans le répertoire D:\developpements\arduino_2024\carnet_croquis\libraries\gvc_communication j'ai mis les fichiers gvc_communications.cpp et gvc_communications.h (je vous les met en pieces jointes).

J'ai créé un sketch tout simple dans lequel j'ai fait croquis - importer une bibliothèque. Du coup l'IDE a mis un #include "gvc_communications.h" à la première ligne.

La compilation se passe bien mais lors de l'édition de liens, l'IDE donne plein d'erreurs de variables déclarées 2 fois. Je vous joins aussi la liste des erreurs.
Est-ce que quelqu'un a déjà réussi a créer une librairie sous l'IDE Arduino et pourrait m'aiguiller ?

D'avance merci et bonne fin de journée
Jean à Grenoble


Thierry

  • Global Moderator
  • Hero Member
  • *****
  • Messages: 827
    • Voir le profil
Re : problème pour l'utilisation d'une librairie maison
« Réponse #1 le: février 25, 2025, 03:23:26 pm »
Bonjour

Ce n'est pas lié aux librairies Arduino mais au langage C. Un fichier .h peut contenir des définitions de structures, des defines ou des fonctions. Mais les variables simples comme gch_caractere_recu doivent être limitées à un source.
Si on veut pouvoir partager un entier toto entre plusieurs sources; il faut:

1 : déclarer dans un fichier .c ou .ino un et un seul 'int toto;' désignant ainsi ce fichier auprès de l'éditeur de liens comme le 'propriétaire' de la variable, celui qui lui donne de sa mémoire pour son stockage.
2 : dans tous ceux qui veulent l'utiliser 'extern int toto;' , disant à l'éditeur de liens (le linker) que cette variable devra être présente dans un autre source et qu'ici on ne lui donne pas de mémoire.

Le plus simple est de rapatrier ces variables dans le source .c de la librairie, quitte à prévoir une petite fonction int GetToto() pour ceux qui voudraient l'utiliser...